systemctl isolate остановил всё лишнее
Переход в цель — не то же, что её запуск. Он останавливает всё, что в новую цель не входит, включая службы, которые вы не собирались трогать. На работающем сервере это равносильно частичной остановке системы, и отменить это одной командой нельзя.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Переход в цель вместо её запуска
Команда перехода останавливает службы, не входящие в цель. Запуск цели такого не делает.
-
Цель не помечена как допустимая для перехода
Переход возможен только в цели с соответствующей меткой. Прочие цели команда отвергает.
-
Службы после перехода нужно запускать вручную
Остановленные переходом службы сами не вернутся. Возврат в прежнюю цель запустит только то, что в неё входит.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Общее состояние системы: degraded указывает на отказавшие unit.
systemctl is-system-runningЧто осталось в состоянии сбоя.
systemctl list-units --state=failed --no-legendКакие цели активны сейчас.
systemctl list-units --type=target --state=active --no-legendРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Команда перехода останавливает службы, не входящие в цель. Запуск цели такого не делает.
- Как проверить
-
Посмотрите, что осталось активным и какая цель действует.
systemctl get-default; systemctl list-units --type=target --state=active --no-legend systemctl list-units --state=failed --no-legend | head
- Как исправить
-
Для запуска цели используйте обычный запуск, а не переход. Переход применяется осознанно при смене режима работы системы.
sudo systemctl start multi-user.target
- Почему происходит
- Переход возможен только в цели с соответствующей меткой. Прочие цели команда отвергает.
- Как проверить
-
Посмотрите метку цели.
systemctl show multi-user.target -p AllowIsolate
- Как исправить
- Проверьте метку допустимости перехода перед использованием команды. Её отсутствие — защита от ровно такой ошибки.
- Почему происходит
- Остановленные переходом службы сами не вернутся. Возврат в прежнюю цель запустит только то, что в неё входит.
- Как проверить
-
Посмотрите, что не запущено из включённого.
systemctl list-unit-files --state=enabled --no-legend | awk '{print $1}' | head -20 systemctl is-system-running
- Как исправить
- Вернитесь в нужную цель и проверьте состояние включённых служб по списку. Часть придётся запустить вручную.
Пример вывода
Переход в цель остановил службы, не входящие в неё. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
systemd[1]: Stopping nginx.service - A high performance web server...
systemd[1]: Stopping postgresql.service - PostgreSQL RDBMS...
systemd[1]: Stopped target multi-user.target - Multi-User System.
systemd[1]: Reached target rescue.target - Rescue Mode.
Связанные ошибки
- Своя цель не запускает свои службы Создали цель для группы служб, а они не поднимаются: нет связей со стороны цели или цель не включена.
- Цель не достигнута: служба ждёт target, который не наступает Служба не запускается, потому что не достигнута цель из After= или Requires=. Разбор целей multi-user, network-online, graphical.
- A stop job is running: выключение висит Перезагрузка останавливается с обратным отсчётом: служба не завершается. Как найти и сократить ожидание.
- Применение сетевых настроек рвёт соединение и не возвращает его Команда применения настроек обрывает доступ к машине: изменения ошибочны, а откатить их некому.
- Система загружается не в то состояние После загрузки нет служб или нет графики: цель по умолчанию указывает не туда. Как посмотреть и переключить.
- Automount: каталог монтируется не вовремя или отваливается Автомонтирование через .automount: как работает TimeoutIdleSec, почему ресурс отваливается и когда лучше обычный .mount.
- Failed to parse calendar expression: ошибка в OnCalendar systemd не разбирает календарное выражение таймера. Правила записи OnCalendar и проверка через systemd-analyze calendar.
- Mount process exited, code=exited, status=32: не найдено устройство Монтирование не проходит: устройство или UUID не найдены, неверная файловая система, недоступен сетевой ресурс. Код 32 от команды mount.
Источники
-
systemd.target(5)
AllowIsolate= и назначение целей. -
systemctl(1)
Разница между запуском цели и переходом в неё. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено на тестовой машине: переход в цель восстановления остановил прикладные службы.