Перезагрузка службы systemd sd_notify через SIGHUB - PullRequest
0 голосов
/ 25 мая 2018

Я внедряю службу systemd, которая использует sd_notify.

В документации sd_notify указано, что такая служба должна отправлять sd_notify(0, "READY=1"); после завершения перезагрузки.

Это имеет смысл для перезагрузок, которые были инициированы самой службой, но мне интересно, как это влияет на перезагрузки, запускаемые пользователем (systemctl reload), потому что systemd.service документация гласит, чтокоманда reload должна быть синхронной, чтобы дождаться завершения перезагрузки.

Теперь у меня вопрос: могу ли я использовать асинхронную команду (например, /bin/kill -HUP $MAINPID) в службе уведомлений и использовать RELOADING=1 и READY=1чтобы получить «блокирующую» перезагрузку, т.е. позволить systemd ждать моего сервиса, или systemd игнорирует эти две в случае перезагрузки из systemctl?

И для полноты: мой код и то, что я хочу иметь:

void doReload() {
    sd_notify(0, "RELOADING=1");
    // operation that takes ca 5 seconds
    sd_notify(0, "READY=1");
}

, и этот метод может быть вызван либо из внутреннего кода, либо обработчиком сигнала, зарегистрированным для SIGHUP

Соответствующая часть дляm системный блок:

[Service]
Type=notify
NotifyAccess=main
ExecStart=/usr/bin/testd
ExecReload=/bin/kill -HUP $MAINPID

И я хочу заархивировать, что ExecReload выполняется синхронно.

...