TimeoutStopSec=: сколько systemd ждёт остановки службы
Задаёт, сколько systemd ждёт завершения процессов после сигнала остановки. По истечении срока процессы добиваются сигналом KILL.
Что делает
Последовательность такая: systemd посылает сигнал из KillSignal= (по умолчанию TERM), ждёт TimeoutStopSec=, затем посылает KILL. Для служб, которые при завершении сохраняют данные — базы, очереди, кеши — важно, чтобы срок был не меньше времени, нужного на сохранение.
Обратная сторона: большой срок задерживает перезагрузку системы. Если служба не реагирует на сигнал, выключение будет ждать весь таймаут. Отсюда знакомая картина при перезагрузке: «A stop job is running for …» с обратным отсчётом.
Где ставится. В секции [Service]. Общее значение по умолчанию — DefaultTimeoutStopSec= в system.conf.
Значения
| Значение | Что происходит |
|---|---|
90s | обычное значение по умолчанию. |
5min | для баз данных и очередей, которым нужно сохранить состояние. |
infinity | ждать бесконечно: выключение системы при подвисшей службе не завершится. |
По умолчанию: обычно 90s
Пример
Запас времени на корректное завершение базы.
[Service]
KillSignal=SIGINT
TimeoutStopSec=5min
# при остановке база успеет сбросить буферы на диск
Сигнал тут заменён нарочно: часть баз считает INT командой быстрого, но корректного завершения, а TERM — командой немедленного.
Типичные ошибки
Слишком малый срок приводит к добиванию службы сигналом KILL и потере несохранённых данных.
Слишком большой срок задерживает выключение и перезагрузку сервера.
Если программа игнорирует сигнал завершения, таймаут будет истекать каждый раз. Проверьте, какой сигнал она ждёт, и задайте KillSignal=.
Связанные ошибки
- signal=KILL (status=9/KILL) в systemdПроцесс службы убит сигналом KILL. Кто мог его послать: OOM-killer, таймаут остановки systemd, администратор.
- Failed with result 'timeout'Состояние timeout: служба не уложилась в отведённое время при запуске, остановке или перезагрузке настроек.
- signal=TERM (status=15/TERM) в systemdПроцесс службы завершён сигналом TERM. Когда это нормальная остановка, а когда признак проблемы.
Рядом стоящие параметры
Где важен на практике
Источники
- systemd.service(5)
- systemd.kill(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)