RestartPreventExitStatus=: когда перезапуск бесполезен
Перечисляет коды выхода и сигналы, при которых перезапуск не выполняется, даже если он включён параметром Restart=.
Что делает
Смысл в том, чтобы не крутить службу вхолостую. Если программа вернула код «неверная конфигурация», перезапуск ничего не исправит: она упадёт так же. Лучше остаться в состоянии failed и попасть в список сбоев, чем упираться в предел частоты запусков.
Где ставится. В секции [Service], вместе с Restart=.
Значения
| Значение | Что происходит |
|---|---|
78 | код ошибки настройки из набора sysexits. |
2 78 SIGABRT | несколько кодов и сигнал через пробел. |
Пример
Служба не перезапускается при ошибке настроек.
[Service]
Restart=on-failure
RestartSec=10s
RestartPreventExitStatus=78 2
Коды выбраны по соглашению программы. Если она их не использует, параметр бесполезен — сначала проверьте, чем она отвечает на ошибку настроек.
Типичные ошибки
Если программа возвращает единицу на всё подряд, параметр не поможет: различать случаи нечем.
Служба останется в состоянии failed — за этим нужен мониторинг, иначе сбой останется незамеченным.
Связанные ошибки
- start-limit-hit: служба заблокирована после серии перезапусковСостояние start-limit-hit и сообщение start request repeated too quickly: systemd перестал перезапускать службу. Как разблокировать и найти исходную причину.
- Коды 64–78 в systemd: набор sysexitsКоды 64-78 из sysexits.h: USAGE, DATAERR, NOINPUT, UNAVAILABLE, SOFTWARE, OSERR, CONFIG и другие. Что означает каждый и где смотреть причину.
- Failed with result 'exit-code'Состояние exit-code: служба завершилась с ненулевым кодом. Что это сообщение значит и где искать настоящую причину.
Рядом стоящие параметры
Источники
- systemd.service(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)