Hello! On Tue, Nov 21, 2017 at 10:46:58PM +0200, Gena Makhomed wrote:
> Здравствуйте, All! > > nginx установлен из официального репозитория nginx.org, CentOS 7.4 > > В логах вот такое наблюдается при перезапуске nginx 1.13.6: > > systemd: Starting nginx - high performance web server... > nginx: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok > nginx: nginx: configuration file /etc/nginx/nginx.conf test is successful > systemd: Failed to read PID from file /var/run/nginx.pid: Invalid argument > systemd: Started nginx - high performance web server. > > И вот такое при запуске nginx 1.13.7: > > systemd: Starting nginx - high performance web server... > systemd: PID file /var/run/nginx.pid not readable (yet?) after start. > systemd: Started nginx - high performance web server. > > Как это можно победить, чтобы в логах такого не было? > > Рекомендуют вот такой workaround: https://stackoverflow.com/a/42084804 > И еще вот такое нашлось заодно: https://stackoverflow.com/a/42555993 > > Но это наверное неправильно будет, добавлять sleep 0.1 в юнит-файл? > > Обе эти ошибки возникают в systemd функции service_load_pid_file() > https://github.com/systemd/systemd/blob/master/src/core/service.c#L815 > Когда systemd не может прочитать pid-файл. > > Насколько я понял из комментариев в функции service_enter_start() > https://github.com/systemd/systemd/blob/master/src/core/service.c#L1909 > > /* For forking services we wait until the start > * process exited. */ > > И в функции service_sigchld_event(): > https://github.com/systemd/systemd/blob/master/src/core/service.c#L2959 > > /* Forking services may occasionally move to a new PID. > * As long as they update the PID file before exiting the old > * PID, they're fine. */ > > Systemd считает что сервис запустился > после того как start process exited ? > > А у nginx получается так, что start process exited, > а pid файл еще не создан и это создает проблемы systemd? > > Можно ли как-то исправить поведение nginx, > чтобы systemd не флудил в логи сообщениями об ошибках? С точки зрения абстрактного счастья для всех даром - наверное, поведение systemd логично, и на момент выхода запущенного процесса pid-файл должен уже существовать. С точки зрения практики - паттерн "daemon(); write_pidfile();" используется чуть менее, чем везде, вплоть до соответствующих библиотечных функций. Так что инициатива выглядит, скажем так, сомнительной. Проще всего, IMHO, это было бы заткнуть на уровне systemd, дожидаясь появления pid-файла при необходимости. -- Maxim Dounin http://mdounin.ru/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru