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

Maxim Dounin mdounin на mdounin.ru
Чт Ноя 23 15:37:54 UTC 2017


Hello!

On Thu, Nov 23, 2017 at 03:49:43PM +0200, Gena Makhomed wrote:

> On 22.11.2017 19:43, Maxim Dounin wrote:
> 
> >> systemd: PID file /var/run/nginx.pid not readable (yet?) after start.
> 
> >> Можно ли как-то исправить поведение nginx,
> >> чтобы systemd не флудил в логи сообщениями об ошибках?
> 
> > С точки зрения абстрактного счастья для всех даром - наверное,
> > поведение systemd логично, и на момент выхода запущенного процесса
> > pid-файл должен уже существовать.
> > 
> > С точки зрения практики - паттерн "daemon(); write_pidfile();"
> > используется чуть менее, чем везде, вплоть до соответствующих
> > библиотечных функций.  Так что инициатива выглядит, скажем так,
> > сомнительной.
> 
> Спросил об этом в списке рассылки systemd-devel:
> https://lists.freedesktop.org/archives/systemd-devel/2017-November/039812.html
> 
> Идея переписать systemd там энтузиазма не вызвала:
> https://lists.freedesktop.org/archives/systemd-devel/2017-November/039820.html
> 
> Более того, мне прислали ссылку на официальную документацию systemd:
> 
> Many other deficiencies with the BSD daemon() function
> are documented in systemd's daemon(7) manpage.
> 
> В systemd's daemon(7) manpage очень подробно расписано
> как должны вести себя SysV Daemons при работе с systemd.
> И очевидно, что nginx этим требованиям не соответствует.
> 
> Original process должен вызывать exit() только после того,
> как будет полностью завершена инициализация daemon process,
> в частности, после того как daemon process создаст свой pid файл.

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

Впрочем, если верить ответу тут:

https://lists.freedesktop.org/archives/systemd-devel/2017-November/039825.html

то соответствующее сообщение можно смело игнорировать, и systemd 
на самом деле умеет дожидаться создания pid-файла.  То есть вопрос 
лишь в том, что при этом systemd пишет в лог.

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


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