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

Gena Makhomed gmm на csdoc.com
Чт Ноя 23 13:49:43 UTC 2017


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 файл.

> Проще всего, IMHO, это было бы заткнуть на уровне systemd,
> дожидаясь появления pid-файла при необходимости.

Кстати, дожидаться pid-файла - это не совсем тривиальная задача,
ведь nginx пишет свой pid-файл не атомарно. Может же быть так,
что файл уже появился, но он будет нулевого размера и попытка
прочитать из него pid завершится ошибкой? Или он будет частично
записан и тогда из pid-файла прочитается pid другого процесса?

Можно ли будет исправить поведение nginx чтобы он соответствовал
требованиям к SysV Daemons из systemd's daemon(7) manpage?

Поведение systemd изменить не получится, я уже пробовал.

-- 
Best regards,
  Gena



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