* [devel] service foo reload
@ 2017-11-08 12:16 Ivan Zakharyaschev
0 siblings, 0 replies; only message in thread
From: Ivan Zakharyaschev @ 2017-11-08 12:16 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 2967 bytes --]
Здравствуйте!!
Подумалось, что есть некоторые проблемы с наличием и использованием
действия reload для сервисов.
1. Неясно, какая требуется семантика: если сервис не запущен, то что
ожидается в результате выполнения. (Например, у действия restart
семантика яснее: в результате сервис должен быть в любом случае
запущен. Для condreload тоже ясно: что-то делается, только если сервис
уже запущен.)
2. У systemd философия такая относительно reload[1]: если есть специальный
способ перечитать настройки, то такое действие у unit-а описывается как
"reload", а если нет -- то его и не должно быть в описании. В отличие
от того, что в сдучае SySV init-скриптов налепили много reload как
синонимов restart.
В результате те (скрипты), что вызывают service foo reload оказываются в
плохом положении. Оно может не сработать в системе с systemd (как на
практике случилось с alterator-fbi), да и непонятно, что они хотят, если
сервис не запущен.
Плюс service foo reload я вижу один: это короче, чем service foo
condreload, и кто-то может по привычке так писать.
(Хорошо, что триггеры и скрипты в пакетах вызывают более продуманные
condreload, condrestart, condstop и не вызывают reload.)
Хочется в связи с этим призвать не реализовывать действие reload в SysV
init-скриптах, убрать его из образца init-скрипта[2]; вызывать condreload
вместо reload.
Но полностью искоренить reload, чтобы быть спокойным (что ошибок не
возникнет) тяжело.
Можно сгладить последствия указанных проблем без искоренения reload:
* на системах с systemd переводить (внутри /sbin/service) действие reload
в systemctl try-reload-or-restart, так же, как и интерпретируется
condreload, а на системах с SySV init для единообразия переводить reload в
condreload. Замечание: тем самым определение действия reload в
init-скрипте будет проигнорировано, использовано только condreload (ради
единообразия между системами с systemd и без).
Другой вариант единообразного поведения как-то более муторно обеспечивать:
на systemd во что-то вроде reload-or-restart (если такое бывает), и
сочинить соответствующую последовательность действия для SySV init.
Если отсавить как есть, то на системах с systemd часто service foo reload
будет вызывать ошибку, а с SysV init -- нет.
Что думаете?
[1]: https://serverfault.com/a/767898/68972 :
> systemd's philosophy is that reload is optional and should be left
undefined if there is no true reload functionality. I'd define "true
reload functionality" as a reload that does not kill and restart the
service, or make the service change its PID. In other words, systemd only
wants to reflect what features exists.
> Instead, you should use systemctl reload-or-restart which will do a
reload if it exists, and a restart if it does not.
[2]:
http://git.altlinux.org/gears/s/service.git?p=service.git;a=blob;f=service/rc.d/init.d/template;h=1d211df5c3e4d21b1eaa10dbd587a537d64f3810;hb=HEAD
--
Best regards,
Ivan
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2017-11-08 12:16 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-08 12:16 [devel] service foo reload Ivan Zakharyaschev
ALT Linux Team development discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
public-inbox-index devel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git