Система загружается не в то состояние
Что запускается при загрузке, определяет цель по умолчанию. Если она сбита — например указывает на аварийный режим или на графическую цель на сервере, — система поднимется не в том состоянии, и часть служб не запустится.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Цель по умолчанию переключена
Команда переключения или ручная правка ссылки меняет поведение всех последующих загрузок. Про это легко забыть.
-
Цель задана параметром ядра
Параметр загрузки вида
systemd.unit=rescue.targetпереопределяет цель по умолчанию. Он мог остаться в настройках загрузчика после разбора аварии. -
Цель указывает на несуществующий unit
После удаления пакета или ошибки в имени цель недостижима, и загрузка уходит в аварийный режим.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Цель по умолчанию одной командой.
systemctl get-defaultПараметры ядра: там может быть переопределение цели.
cat /proc/cmdlineКакие цели достигнуты фактически.
systemctl list-units --type=target --no-pagerРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Команда переключения или ручная правка ссылки меняет поведение всех последующих загрузок. Про это легко забыть.
- Как проверить
-
Посмотрите цель и ссылку.
systemctl get-default ls -l /etc/systemd/system/default.target
- Как исправить
-
Верните обычную цель для сервера.
sudo systemctl set-default multi-user.target
- Почему происходит
- Параметр загрузки вида
systemd.unit=rescue.targetпереопределяет цель по умолчанию. Он мог остаться в настройках загрузчика после разбора аварии.
- Как проверить
-
Посмотрите параметры текущей загрузки и настройки загрузчика.
cat /proc/cmdline grep -r "systemd.unit" /etc/default/grub /boot/loader 2>/dev/null
- Как исправить
- Уберите параметр из настроек загрузчика и обновите его конфигурацию.
- Почему происходит
- После удаления пакета или ошибки в имени цель недостижима, и загрузка уходит в аварийный режим.
- Как проверить
-
Проверьте, существует ли цель.
systemctl cat $(systemctl get-default) 2>&1 | head -3
- Как исправить
- Переустановите цель командой переключения: она создаст правильную ссылку.
Пример вывода
Цель по умолчанию сбита на аварийный режим. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ systemctl get-default
emergency.target
$ ls -l /etc/systemd/system/default.target
lrwxrwxrwx 1 root root 41 Sep 10 11:20 default.target -> /lib/systemd/system/emergency.target
Связанные ошибки
- Цель не достигнута: служба ждёт target, который не наступает Служба не запускается, потому что не достигнута цель из After= или Requires=. Разбор целей multi-user, network-online, graphical.
- You are in emergency mode: система не загрузилась Загрузка остановилась в аварийном режиме. Что проверять: fstab, файловые системы, цель по умолчанию. Как войти и починить.
- WantedBy= в неверной секции: автозапуск не работает Параметр WantedBy= указан в [Unit] вместо [Install]. Служба запускается вручную, но не поднимается после перезагрузки.
- A start job is running: загрузка висит на одной службе Загрузка останавливается с обратным отсчётом: служба не укладывается в таймаут. Как найти виновника и не ждать.
- Cannot assign requested address при привязке Ошибка 99 при привязке: адрес не принадлежит машине или ещё не поднят. Разбор с network-online.target и ip_nonlocal_bind.
- Dependency failed for … и результат 'dependency' Сообщение Dependency failed for: служба не запускалась, потому что упала её зависимость. Как найти настоящего виновника.
- Failed with result 'exec-condition' и condition failed Состояния exec-condition и condition failed: запуск не состоялся, потому что условие не выполнено. Это не сбой, а задуманное поведение.
- Found ordering cycle: циклическая зависимость при загрузке systemd нашёл цикл в порядке запуска и разорвал его, отбросив одну зависимость. Как найти цикл и правильно расставить After и Requires.
Источники
-
systemd.special(7)
default.target и цели загрузки. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено переключением цели по умолчанию на тестовой машине.