ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Ivan Zakharyaschev <imz@altlinux.org>
To: devel@lists.altlinux.org
Subject: [devel] service foo reload
Date: Wed, 8 Nov 2017 15:16:13 +0300 (MSK)
Message-ID: <alpine.LFD.2.20.1711081352290.1631@imap.altlinux.org> (raw)

[-- 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

                 reply	other threads:[~2017-11-08 12:16 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.LFD.2.20.1711081352290.1631@imap.altlinux.org \
    --to=imz@altlinux.org \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

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