From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 8 Nov 2017 15:16:13 +0300 (MSK) From: Ivan Zakharyaschev To: devel@lists.altlinux.org Message-ID: User-Agent: Alpine 2.20 (LFD 67 2015-01-07) MIME-Version: 1.0 Content-Type: multipart/mixed; BOUNDARY="1807885841-830759413-1510143373=:1631" Subject: [devel] service foo reload X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Nov 2017 12:16:13 -0000 Archived-At: List-Archive: List-Post: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --1807885841-830759413-1510143373=:1631 Content-Type: text/plain; format=flowed; charset=KOI8-R Content-Transfer-Encoding: 8BIT Здравствуйте!! Подумалось, что есть некоторые проблемы с наличием и использованием действия 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 --1807885841-830759413-1510143373=:1631--