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 mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru