KillSignal= и порядок сигналов при остановке службы
Задаёт сигнал, которым systemd просит службу завершиться. По умолчанию это TERM; после истечения таймаута остановки посылается KILL.
Что делает
Последовательность фиксированная: сигнал из этого параметра, ожидание TimeoutStopSec=, затем добивание сигналом из FinalKillSignal= (по умолчанию KILL). Менять первый сигнал нужно тогда, когда программа понимает под корректным завершением что-то другое.
Пример — nginx: для него QUIT означает «завершиться, доработав текущие соединения», а TERM — «завершиться немедленно». Для баз данных разница между INT и TERM тоже бывает значимой.
Где ставится. В секции [Service].
Значения
| Значение | Что происходит |
|---|---|
SIGTERM | по умолчанию. |
SIGQUIT | корректное завершение у части служб. |
SIGINT | быстрое, но корректное завершение у некоторых баз. |
FinalKillSignal=SIGABRT | добивать с созданием дампа: полезно при разборе подвисаний. |
SendSIGHUP=yes | дополнительно послать HUP после основного сигнала. |
По умолчанию: SIGTERM
Пример
Служба, которая корректно завершается по QUIT.
[Service]
KillSignal=SIGQUIT
TimeoutStopSec=60s
FinalKillSignal=SIGABRT
Добивание с дампом помогает понять, на чём служба зависла, если она не укладывается в таймаут остановки.
Типичные ошибки
Смена сигнала без проверки реакции программы приводит к добиванию по таймауту.
Сигнал посылается всем процессам группы при KillMode=control-group — это нормально.
Если программа игнорирует сигнал, остановка всегда будет занимать весь таймаут.
Связанные ошибки
- signal=TERM (status=15/TERM) в systemdПроцесс службы завершён сигналом TERM. Когда это нормальная остановка, а когда признак проблемы.
- signal=KILL (status=9/KILL) в systemdПроцесс службы убит сигналом KILL. Кто мог его послать: OOM-killer, таймаут остановки systemd, администратор.
- signal=INT и signal=QUIT в systemdПроцесс службы завершён сигналом INT или QUIT. Кто их посылает службам и почему это обычно не systemd.
- Failed with result 'timeout'Состояние timeout: служба не уложилась в отведённое время при запуске, остановке или перезагрузке настроек.
Рядом стоящие параметры
Где важен на практике
Источники
- systemd.kill(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)