NotifyAccess=: кто может отчитываться systemd о готовности
Определяет, уведомления от каких процессов службы systemd принимает: только от главного, от всех процессов службы или ни от каких.
Что делает
Значение по умолчанию — main: принимаются уведомления только от главного процесса. Если программа отчитывается из дочернего процесса (так делают некоторые обёртки и программы с рабочими процессами), уведомление будет отброшено, и запуск закончится таймаутом при формально работающей службе.
Диагностический признак: служба работает и отвечает, а systemd считает её запускающейся. В журнале при этом бывает строка о том, что уведомление отброшено.
Где ставится. В секции [Service], имеет смысл только при Type=notify или notify-reload.
Значения
| Значение | Что происходит |
|---|---|
main | по умолчанию: только от главного процесса. |
exec | от процессов, запущенных командами Exec*=. |
all | от любых процессов контрольной группы службы. |
none | уведомления не принимаются вовсе. |
По умолчанию: main
Пример
Служба, отчитывающаяся из дочернего процесса.
[Service]
Type=notify
NotifyAccess=all
ExecStart=/usr/local/bin/wrapper --spawn /usr/local/bin/myapp
Значение all стоит ставить осознанно: любой процесс службы сможет сообщить о готовности, в том числе преждевременно.
Типичные ошибки
Таймаут запуска при Type=notify часто вызван именно этим параметром, а не медленной программой.
Значение all менее строгое: преждевременное уведомление от дочернего процесса заставит systemd считать службу готовой раньше времени.
При Type=simple параметр не имеет эффекта, и его наличие только запутывает читателя unit-файла.
Связанные ошибки
- Failed with result 'timeout'Состояние timeout: служба не уложилась в отведённое время при запуске, остановке или перезагрузке настроек.
- Failed with result 'protocol'Состояние protocol: служба нарушила договор со systemd. Обычно Type=notify без уведомления или Type=dbus без имени на шине.
- Job for … failed because a timeout was exceededЗадание на запуск прервано по таймауту. Как отличить медленный старт от заблокированного и правильно настроить TimeoutStartSec.
Рядом стоящие параметры
Источники
- systemd.service(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)