Welcome! Log In Create A New Profile

Advanced

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

Gena Makhomed
November 23, 2017 02:02PM
On 23.11.2017 19:13, 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();", и при таком подходе - ситуацию не
> изменить.

А при каком подходе ситуацию c nginx изменить можно?
Если говорить конструктивно.

Посмотрел у себя в системе, CentOS 7.4 - там достаточно мало осталось
сервисов Type=forking. Postfix например, запускает много процессов,
как и nginx - проверил его исходники, он действует точно так,
как рекомендуется в документе systemd's daemon(7) manpage.

О каких именно "чуть менее, чем все существующие демоны"
сервисах Вы говорите? Есть еще кроме nginx примеры некорректного
поведения systemd-сервисов с Type=forking которые запускают много
дочерних процессов как это делает nginx или postfix?

Проблемы в работе под управлением systemd сейчас есть только у nginx:
systemd: PID file /var/run/nginx.pid not readable (yet?) after start.
Все остальные сервисы у меня на серверах под systemd работают нормально.

Когда я спросил у Lennart Poettering насчет того,
что все существующие демоны так делают он мне ответил
"the better written ones synchronize properly".

Хочется чтобы и nginx тоже попадал в эту категорию "better written".

Когда я спрашивал разработчиков systemd чтобы они исправили
systemd, вот что Lennart Poettering из Red Hat мне ответил:

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

[...]

>>> But "daemon(); write_pidfile();" is common pattern
>>> used by many services and even in library functions.

>> It may be common, but not necessarily correct. The parent process should
>> only exit *after* finishing all the preparations (i.e. something like
>> "fork(); write_pidfile(); exit()"), since systemd uses the exit as a
signal
>> that the daemon is now "ready".

> You are joking? Why you think that this pattern is not correct?

It doesn't work on SysV init either: "/etc/init.d/nginx start ;
/etc/init.d/nginx stop" is racy as it will leave ngnx running if it the
PID file isn't written by the time the stop command is used.

[...]

> Or may be it will be simpler to fix root cause of problem in systemd?

Well, I wish you good luck fixing SysV init scripts too. Before we
talk about "fixing systemd", let's talk how do you intend to make
"/etc/init.d/nginx start ; /etc/init.d/nginx stop" work correctly,
without races, without sometimes leaving nginx running, if you don't
wait for the PID file to be written safely before exiting.

Lennart

--
Lennart Poettering, Red Hat

=================================================================

Что ему ответить? Как сделать так, чтобы команда
"/etc/init.d/nginx start ; /etc/init.d/nginx stop"
работала без глюков на CentOS 6 ? Она ведь глючит.

Может быть действительно имеет смысл сделать
"wait for the PID file to be written safely before exiting"
и не брать для nginx пример с кривых и глючных демонов
у которых есть race conditions при старте/остановке?

>> Максим, можно ли сделать так, чтобы nginx соответствовал
>> тем требованиям которые предъявляет systemd к SysV Daemons?

>> https://www.freedesktop.org/software/systemd/man/daemon.html

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

А как это лучше всего сделать?

--
Best regards,
Gena

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

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

Gena Makhomed November 21, 2017 03:48PM

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

Maxim Dounin November 22, 2017 12:44PM

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

Gena Makhomed November 23, 2017 08:52AM

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

Maxim Dounin November 23, 2017 10:40AM

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

Gena Makhomed November 23, 2017 11:30AM

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

Igor Sysoev November 23, 2017 11:46AM

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

Maxim Dounin November 23, 2017 12:18PM

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

Gena Makhomed November 23, 2017 12:34PM

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

Maxim Dounin November 23, 2017 12:14PM

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

Gena Makhomed November 23, 2017 02:02PM

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

Maxim Dounin November 23, 2017 04:02PM

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

Gena Makhomed November 23, 2017 06:14PM

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

Maxim Dounin November 23, 2017 11:14PM

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

Evgeniy Berdnikov November 24, 2017 03:08AM

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

Vadim A. Misbakh-Soloviov November 24, 2017 04:18AM

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

Maxim Dounin November 24, 2017 08:00AM

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

Gena Makhomed November 24, 2017 06:32AM

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

Vadim A. Misbakh-Soloviov November 24, 2017 06:38AM

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

Konstantin Tokarev November 24, 2017 06:46AM

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

Pavel V. November 24, 2017 07:00AM

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

Maxim Dounin November 24, 2017 08:36AM

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

Gena Makhomed November 24, 2017 09:50AM

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

Vadim A. Misbakh-Soloviov November 24, 2017 10:14AM

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

Maxim Dounin November 24, 2017 02:46PM

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

Gena Makhomed November 25, 2017 09:24AM

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

Slawa Olhovchenkov November 25, 2017 09:38AM

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

Konstantin Tokarev November 25, 2017 08:48PM

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

S.A.N November 23, 2017 12:30PM

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

Gena Makhomed November 23, 2017 12:56PM

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

Maxim Dounin November 23, 2017 12:58PM

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

Илья Шипицин November 23, 2017 01:32PM

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

Konstantin Pavlov November 23, 2017 03:08PM

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

Evgeniy Berdnikov November 23, 2017 02:06PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 218
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready