SystemdDoctor

Dependency failed for … и результат 'dependency'

Строка «Dependency failed for …» означает, что вашу службу даже не пытались запустить: не поднялось то, от чего она зависит. Разбирать нужно зависимость, а не саму службу — её журнал будет пустым, и это нормально.

Что это значит

Отношения задаются параметрами Requires=, BindsTo= и Requisite=: неудача любого из них отменяет запуск. Wants= так не работает — при нём служба запустится даже при упавшей зависимости.

Частая цепочка на серверах: не смонтировался раздел, из-за этого не поднялась база, из-за неё — приложение. В журнале три сообщения, а причина одна, самая первая.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Упала служба, указанная в Requires=

    Жёсткая зависимость отменяет запуск. Сообщение про зависимость появляется у всех, кто на неё ссылается, и настоящая ошибка тонет среди них.

  2. Не смонтировался нужный раздел

    Точки монтирования — тоже unit. Неудача монтирования тянет за собой всё, что от него зависит, включая зависимости, созданные автоматически по RequiresMountsFor=.

  3. Зависимость не найдена вовсе

    Опечатка в имени или отсутствующий unit тоже приводят к неудаче: systemd не может выполнить требование к тому, чего нет.

  4. Циклическая зависимость разорвана systemd

    Если службы ссылаются друг на друга по кругу, systemd разрывает цикл, отбрасывая одну из связей, и результат может выглядеть как неудача зависимости.

Диагностика

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

Первым делом: показывает все упавшие unit, включая настоящего виновника.

systemctl --failed --no-pager

Дерево зависимостей с состояниями: видно, какая ветка не поднялась.

systemctl list-dependencies myapp.service --no-pager

Все сообщения о зависимостях за текущую загрузку в одном списке — по ним легко найти первое.

journalctl -b --no-pager | grep -iE "dependency failed|failed to mount" | head -20

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Упала служба, указанная в Requires=
Почему происходит
Жёсткая зависимость отменяет запуск. Сообщение про зависимость появляется у всех, кто на неё ссылается, и настоящая ошибка тонет среди них.
Как проверить
Найдите, что упало первым.
systemctl list-dependencies myapp.service --no-pager
systemctl --failed --no-pager
Как исправить
Разбирайтесь с упавшей зависимостью. Если её неудача не должна мешать вашей службе, замените Requires= на Wants=.
2. Не смонтировался нужный раздел
Почему происходит
Точки монтирования — тоже unit. Неудача монтирования тянет за собой всё, что от него зависит, включая зависимости, созданные автоматически по RequiresMountsFor=.
Как проверить
Посмотрите состояние точек монтирования.
systemctl list-units --type=mount --state=failed --no-pager
journalctl -u data.mount -n 20 --no-pager
Как исправить
Исправьте монтирование: проверьте запись в /etc/fstab, существование устройства и файловую систему.
3. Зависимость не найдена вовсе
Почему происходит
Опечатка в имени или отсутствующий unit тоже приводят к неудаче: systemd не может выполнить требование к тому, чего нет.
Как проверить
Проверьте имена зависимостей.
systemctl show myapp.service -p Requires -p Wants -p After
systemctl status имя-зависимости.service
Как исправить
Исправьте имя с полным расширением (.service, .target, .mount) или уберите ссылку на несуществующий unit.
4. Циклическая зависимость разорвана systemd
Почему происходит
Если службы ссылаются друг на друга по кругу, systemd разрывает цикл, отбрасывая одну из связей, и результат может выглядеть как неудача зависимости.
Как проверить
Поищите сообщения про цикл в журнале загрузки.
journalctl -b --no-pager | grep -i "cycle\|breaking ordering"
Как исправить
Уберите лишнюю связь. Порядок задаётся After=, а необходимость — Requires=: их смешивание и создаёт циклы.

Пример вывода

Не смонтировался раздел, из-за этого пропущен запуск службы. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

× backup.service - Nightly backup
     Loaded: loaded (/etc/systemd/system/backup.service; enabled; preset: enabled)
     Active: inactive (dead)

systemd[1]: mnt-backup.mount: Mount process exited, code=exited, status=32/n/a
systemd[1]: mnt-backup.mount: Failed with result 'exit-code'.
systemd[1]: Dependency failed for backup.service - Nightly backup.
systemd[1]: backup.service: Job backup.service/start failed with result 'dependency'.

Полезная строка здесь первая: код 32 от команды mount. Две последние — только следствие.

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

Источники

  • systemd.unit(5)
    Requires=, Wants=, BindsTo=, Requisite= и последствия неудачи зависимости.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено связкой mount-unit с неверным UUID и службы с RequiresMountsFor.
    собственная проверка, systemd 255
    сверено 15 сентября 2026