WatchdogSec=: сторожевой таймер службы
Задаёт срок, в течение которого служба обязана прислать systemd отметку о работоспособности. Не прислала — считается подвисшей и, как правило, перезапускается.
Что делает
Механизм работает только с программами, которые его поддерживают: они вызывают уведомление с отметкой не реже половины заданного срока. Программа узнаёт срок из переменной окружения WATCHDOG_USEC, которую systemd ей передаёт.
Это единственный штатный способ обнаружить подвисание: процесс жив, порт слушает, а работа не идёт. Проверка снаружи такое ловит хуже, потому что подвисшая служба часто продолжает принимать соединения.
Где ставится. В секции [Service], вместе с Restart=on-watchdog или Restart=on-failure.
Значения
| Значение | Что происходит |
|---|---|
30s | типичное значение для служб с короткими операциями. |
5min | для служб, обрабатывающих долгие задачи между отметками. |
infinity | отключает сторожевой таймер. |
Пример
Сторожевой таймер с перезапуском по срабатыванию.
[Service]
Type=notify
WatchdogSec=30s
Restart=on-watchdog
WatchdogSignal=SIGABRT
Сигнал ABRT выбран нарочно: он создаёт дамп памяти, и по трассировке видно, на чём служба заблокировалась.
Типичные ошибки
Включение параметра для программы без поддержки отметок даёт перезапуск ровно по расписанию срока — ровный интервал в журнале и есть главный признак этой ошибки.
Слишком короткий срок у службы с долгими операциями приводит к ложным срабатываниям.
Отключать сторожевой таймер, чтобы «перестало перезапускаться», значит скрывать подвисания вместо их разбора.
Связанные ошибки
- Failed with result 'watchdog'Состояние watchdog: служба не прислала отметку сторожевому таймеру за отведённое время. Настройка WatchdogSec и разбор.
- signal=ABRT (status=6/ABRT) в systemdПроцесс службы завершён сигналом ABRT: программа сама прервала работу после внутренней проверки. Где искать причину.
- signal=TERM (status=15/TERM) в systemdПроцесс службы завершён сигналом TERM. Когда это нормальная остановка, а когда признак проблемы.
Рядом стоящие параметры
Источники
- systemd.service(5)
- sd_notify(3)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)