Своя цель не запускает свои службы
Цель сама ничего не запускает: службы попадают в неё через связи. Если ни одна служба не объявила связь и цель не объявила желание их запустить, она достигается пустой.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Службы не связаны с целью
Связь объявляется либо со стороны цели через желание, либо со стороны службы через механизм установки.
-
Цель не включена в автозапуск
Своя цель тоже должна быть включена или затребована другой целью, иначе при загрузке она не достигается.
-
Службы связаны только через остановку
Параметр принадлежности передаёт остановку и перезапуск, но не запуск. Цель достигается, службы не стартуют.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Что входит в цель.
systemctl list-dependencies mystack.target --no-pagerВключена ли цель.
systemctl is-enabled mystack.targetОбъявленные связи цели.
systemctl show mystack.target -p Wants -p RequiresРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Связь объявляется либо со стороны цели через желание, либо со стороны службы через механизм установки.
- Как проверить
-
Посмотрите зависимости цели.
systemctl list-dependencies mystack.target --no-pager systemctl show mystack.target -p Wants
- Как исправить
-
Объявите службы в цели через
Wants=либо укажите цель в секции установки каждой службы и включите их.# в цели [Unit] Wants=myapp-api.service myapp-worker.service
- Почему происходит
- Своя цель тоже должна быть включена или затребована другой целью, иначе при загрузке она не достигается.
- Как проверить
-
Посмотрите состояние включения.
systemctl is-enabled mystack.target
- Как исправить
-
Включите цель с указанием в секции установки, что её хочет обычная цель загрузки.
# в цели [Install] WantedBy=multi-user.target
- Почему происходит
- Параметр принадлежности передаёт остановку и перезапуск, но не запуск. Цель достигается, службы не стартуют.
- Как проверить
-
Посмотрите параметры служб.
systemctl show myapp-api.service -p PartOf -p WantedBy
- Как исправить
- Добавьте связь запуска: принадлежность отвечает только за остановку.
Пример вывода
Цель достигнута, службы не запущены. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ sudo systemctl start mystack.target
$ systemctl list-dependencies mystack.target --no-pager
mystack.target
● └─(ничего)
$ systemctl is-active myapp-api.service
inactive
Связанные ошибки
- Цель не достигнута: служба ждёт target, который не наступает Служба не запускается, потому что не достигнута цель из After= или Requires=. Разбор целей multi-user, network-online, graphical.
- Служба останавливается сама: StopWhenUnneeded Служба выключается, когда её перестают требовать. Разбор параметра StopWhenUnneeded и связки BindsTo.
- WantedBy= в неверной секции: автозапуск не работает Параметр WantedBy= указан в [Unit] вместо [Install]. Служба запускается вручную, но не поднимается после перезагрузки.
- Connection refused в журнале службы Соединение отклонено: служба не может подключиться к базе, кешу или другому сервису. Порядок запуска, адрес, брандмауэр.
- Dependency failed for … и результат 'dependency' Сообщение Dependency failed for: служба не запускалась, потому что упала её зависимость. Как найти настоящего виновника.
- Docker: демон не запускается без containerd docker.service падает, потому что не работает containerd.service. Разбор зависимости и сокета containerd.
- Found ordering cycle: циклическая зависимость при загрузке systemd нашёл цикл в порядке запуска и разорвал его, отбросив одну зависимость. Как найти цикл и правильно расставить After и Requires.
- Operation refused, unit may be requested by dependency only systemd отказывается запускать unit вручную из-за RefuseManualStart=yes. Что это значит и как запустить службу правильно.
Источники
-
systemd.target(5)
Цели и связи с unit. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено целью без объявленных связей.