ExecReload=: перезагрузка настроек службы без перезапуска
Задаёт команду, которая выполняется при systemctl reload. Обычно это посылка сигнала главному процессу, по которому программа перечитывает настройки, не прерывая работу.
Что делает
Перезагрузка настроек полезна там, где перезапуск дорог: веб-серверы не рвут соединения, балансировщики не теряют запросы. Но работает она только если программа это поддерживает: реакция на сигнал должна быть предусмотрена в ней самой.
Если программа не умеет перечитывать настройки, параметр лучше не задавать вовсе. Иначе systemctl reload завершит службу: сигнал HUP по умолчанию убивает процесс.
Где ставится. В секции [Service]. Без него команда systemctl reload для службы недоступна.
Значения
| Значение | Что происходит |
|---|---|
/bin/kill -HUP $MAINPID | самый частый вид: сигнал главному процессу. |
/usr/sbin/nginx -s reload | собственная команда программы, если она есть. |
/bin/kill -USR2 $MAINPID | мягкая замена рабочих процессов у части служб. |
Пример
Перезагрузка настроек сигналом и проверка перед ней.
[Service]
ExecStart=/usr/sbin/nginx -g 'daemon off; master_process on;'
ExecReload=/usr/sbin/nginx -t
ExecReload=/bin/kill -s HUP $MAINPID
Две строки выполняются по порядку: сначала проверка конфигурации, затем сигнал. Если проверка не прошла, сигнал не посылается и работающая служба остаётся с прежними настройками.
Типичные ошибки
Шаблонное ExecReload=/bin/kill -HUP $MAINPID у программы без обработки этого сигнала завершает службу при каждой перезагрузке настроек.
Подстановка $MAINPID пуста, если служба не запущена: команда перезагрузки настроек для остановленной службы вернёт ошибку.
Кавычки вокруг $MAINPID мешают подстановке. Писать надо без них.
Перезагрузка настроек не перечитывает unit-файл. Для этого нужен systemctl daemon-reload, и это совсем другая команда.
Связанные ошибки
- signal=HUP (status=1/HUP) в systemdПроцесс службы завершён сигналом HUP. Обычно это перезагрузка настроек, которую программа поняла как команду выйти.
- status=3/NOTIMPLEMENTED в systemdКод 3/NOTIMPLEMENTED по соглашению LSB: запрошенное действие не поддерживается. Обычно это reload у службы, которая его не умеет.
- Warning: The unit file … changed on diskПредупреждение о том, что unit-файл изменился на диске: systemd работает со старой версией. Когда нужен daemon-reload.
Рядом стоящие параметры
Где важен на практике
Источники
- systemd.service(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)