systemd: PID file /var/run/nginx.pid not readable (yet?) after start.

Maxim Dounin mdounin на mdounin.ru
Чт Ноя 23 17:13:06 UTC 2017


Hello!

On Thu, Nov 23, 2017 at 06:28:55PM +0200, Gena Makhomed wrote:

> On 23.11.2017 17:37, Maxim Dounin wrote:
> 
> >> В systemd's daemon(7) manpage очень подробно расписано
> >> как должны вести себя SysV Daemons при работе с systemd.
> >> И очевидно, что nginx этим требованиям не соответствует.
> 
> >> Original process должен вызывать exit() только после того,
> >> как будет полностью завершена инициализация daemon process,
> >> в частности, после того как daemon process создаст свой pid файл.
> 
> > Это, что называется, всё очень интересно, но вызывает сомнение
> > успех подобных рекомендаций.  Особенно с учётом отсутствия
> > каких-либо внятных примеров того, что же использовать вместо
> > daemon(3).  О чём я, собственно, и писал выше.
> 
> Что использовать вместо daemon(3) документировано в daemon(7):
> https://www.freedesktop.org/software/systemd/man/daemon.html
> 
> Lennart Poettering очень подробно ответил на этот вопрос в рассылке:
> https://lists.freedesktop.org/archives/systemd-devel/2017-November/039830.html
> 
> Впрочем, если очень хочется использовать все-таки daemon(3) то можно:
> https://lists.freedesktop.org/archives/systemd-devel/2017-November/039834.html
> 
> Кстати, Lennart Poettering нашел еще одну ошибку в исходниках nginx:
> https://lists.freedesktop.org/archives/systemd-devel/2017-November/039832.html

Это всё замечательно (за вычетом того, предлагаемое использование 
daemon(3) почему-то не учитывает, что после вызова daemon(3) 
parent-процесса уже нет, а "ошибка" - не ошибка), но не отменяет 
того, что чуть менее, чем все существующие демоны делают именно 
"daemon(); write_pidfile();", и при таком подходе - ситуацию не 
изменить.

> > Впрочем, если верить ответу тут:
> > https://lists.freedesktop.org/archives/systemd-devel/2017-November/039825.html
> 
> > то соответствующее сообщение можно смело игнорировать, и systemd
> > на самом деле умеет дожидаться создания pid-файла.  То есть вопрос
> > лишь в том, что при этом systemd пишет в лог.
> 
> Не надо верить тому, что говорит Michael Chapman - он ошибается.
> systemd не ждет появления pid-файла, я это проверял по исходникам.
> 
> Лучше верить тому, что говорит Lennart Poettering, автор systemd:
> https://lists.freedesktop.org/archives/systemd-devel/2017-November/039833.html
> 
> Всегда надо указывать корректный PIDFile= для сервисов Type=forking:
> https://lists.freedesktop.org/archives/systemd-devel/2017-November/039831.html
> 
> Максим, можно ли сделать так, чтобы nginx соответствовал
> тем требованиям которые предъявляет systemd к SysV Daemons?
> 
> https://www.freedesktop.org/software/systemd/man/daemon.html

Можно, я ж разве против?

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru