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

Gena Makhomed gmm на csdoc.com
Пт Ноя 24 14:48:41 UTC 2017


On 24.11.2017 15:33, Maxim Dounin wrote:

>>> Давайте, всё-таки, опеределимся: мы за всё хорошее против всего
>>> плохого (== чтобы демоны писали pid-файлы до выхода запущенного
>>> процесса, потому что по другому - плохо), или вопрос исключительно
>>> в том, чтобы systemd не ругался в логи?

>> Так ведь systemd и ругается в логи потому что по другому - плохо.
>> Например, команда "/etc/init.d/nginx start ; /etc/init.d/nginx stop"
>> будет глючить на системах, где nginx запускается в виде SysV сервиса.

> То есть боремся за всё хорошее против всего плохого, правильно я
> понял ответ?

Есть спецификация на запуск сервисов под управлением systemd.
Вопрос лишь в том, соответствует nginx этой спецификации или нет.

nginx ведь соответствует например, спецификации на протокол HTTP,
почему же он не может соответствовать спецификации из daemon(7)?

Это создает проблемы при использовании legacy систем инициализации?
Нет, наборот, решает имеющиеся проблемы с race conditions при старте.

Не понимаю в чем тут проблема, если поддержка этой спецификации
требует добавления в nginx всего нескольких десятков строк кода.

> Ну вот тогда, как я уже неоднократно говорил - выбранная методика
> борьбы - не работает и не будет работать.  И поведение nginx'а тут
> совершенно нерелевантно.

Это не вопрос борьбы, это вопрос соответствия требованиям спецификации.

Если в unit-файле nginx написано Type=forking - ожидается что nginx
будет вести себя так, как того требует спецификация сервисов systemd.

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

В TODO файле systemd есть такая запись: "- introduce Type=pid-file"
Это как раз и есть это предложение, просто оно еще не реализовано.

> Отдельно отмечу, что смысла в этой борьбе - приблизительно столько
> же, сколько смысла в команде "/etc/init.d/nginx start ;
> /etc/init.d/nginx stop".

Есть различные баги в софте, в частности - race conditions,
Команда "/etc/init.d/nginx start ; /etc/init.d/nginx stop"
- это просто пример, как можно этот баг воспроизвести.

-- 
Best regards,
  Gena



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