Requires= в systemd: жёсткая зависимость
Объявляет, что для работы этого unit необходим другой. При запуске systemd поднимет и его, а если тот не поднялся — запуск отменяется.
Что делает
Жёсткая зависимость означает: без этого работать нельзя. Неудача зависимости даёт сообщение «Dependency failed for …» и результат dependency — ваша служба не запускается вовсе, и её журнал остаётся пустым.
Порядок при этом не задаётся: Requires= без After= означает «запусти и то и это», возможно одновременно. Почти всегда нужны оба параметра.
Где ставится. В секции [Unit].
Значения
| Значение | Что происходит |
|---|---|
Requires=postgresql.service | без базы служба не запускается. |
Requires=data.mount | зависимость от точки монтирования. |
Пример
Служба, которая без базы бессмысленна.
[Unit]
Requires=postgresql.service
After=postgresql.service
Если служба умеет ждать базу и повторять подключение, лучше Wants=: тогда падение базы не остановит запуск приложения.
Типичные ошибки
Неудача зависимости отменяет запуск: в журнале вашей службы не будет ничего, кроме сообщения о зависимости.
Остановка зависимости останавливает и вашу службу — это отличает Requires= от Wants=.
Без After= порядок не определён: служба может стартовать одновременно с зависимостью.
Жёсткая зависимость от сетевого ресурса делает загрузку хрупкой: одна недоступная точка монтирования останавливает цепочку.
Связанные ошибки
- Dependency failed for … и результат 'dependency'Сообщение Dependency failed for: служба не запускалась, потому что упала её зависимость. Как найти настоящего виновника.
- Mount process exited, code=exited, status=32: не найдено устройствоМонтирование не проходит: устройство или UUID не найдены, неверная файловая система, недоступен сетевой ресурс. Код 32 от команды mount.
- Found ordering cycle: циклическая зависимость при загрузкеsystemd нашёл цикл в порядке запуска и разорвал его, отбросив одну зависимость. Как найти цикл и правильно расставить After и Requires.
Рядом стоящие параметры
Где важен на практике
Источники
- systemd.unit(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)