SystemdDoctor
OnFailure= [Unit]

OnFailure= в systemd: что запустить при сбое службы

Перечисляет unit, которые systemd запустит, когда этот перейдёт в состояние failed. Обычно так вызывают службу оповещения.

Что делает

Это единственный встроенный способ узнать о сбое, не опрашивая систему постоянно. В паре с шаблонным unit получается универсальное оповещение: OnFailure=notify@%n.service, где подстановка %n передаёт имя упавшей службы.

Оповещение особенно нужно задачам по таймеру: их сбой иначе остаётся незамеченным, потому что таймер продолжает срабатывать по расписанию.

Где ставится. В секции [Unit].

Значения

ЗначениеЧто происходит
notify-failure@%n.serviceшаблонная служба оповещения с именем упавшего unit.
OnFailureJobMode=replaceрежим постановки задания; по умолчанию replace.

Пример

Оповещение о сбое любой службы одним шаблоном.

# в любой службе
[Unit]
OnFailure=notify-failure@%n.service

# /etc/systemd/system/notify-failure@.service
[Unit]
Description=Оповещение о сбое %i
[Service]
Type=oneshot
ExecStart=/usr/local/bin/notify-failure %i

Подстановка %n даёт полное имя unit с расширением, %N — без него. В шаблоне оно доступно как %i.

Типичные ошибки

Оповещение не срабатывает при остановке вручную: только при переходе в состояние failed.

Служба оповещения сама может упасть — и об этом уже никто не узнает. Она должна быть предельно простой.

При цикле перезапусков оповещения посыплются пачкой: стоит предусмотреть подавление повторов.

Связанные ошибки

Рядом стоящие параметры

Источники

  • systemd.unit(5) официальная документация
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04) собственная проверка
    сверено 15 сентября 2026