open atlas
↑ К треку
Linux: операционная система LIN · 02 · 04

Targets и уровни выполнения

Targets systemd — именованные точки синхронизации, объединяющие юниты. multi-user.target — нормальный сервер, graphical.target добавляет рабочий стол. rescue.target и emergency.target — режимы восстановления. systemctl isolate переключает живую систему на другой target.

LIN Middle ◷ 20 min
Уровень
ОсновыJuniorMiddleSenior

Сервер ведёт себя странно после обновления — некоторые сервисы сломаны, но полная перезагрузка нежелательна. Ты выполняешь systemctl isolate rescue.target. Система переходит в однопользовательскую оболочку, убивает все несущественные сервисы и оставляет корневую файловую систему смонтированной на чтение-запись. Ты правишь сломанный конфиг, затем systemctl isolate multi-user.target возвращает всё обратно — без перезагрузки.

Вот targets на практике. Это не просто концепция загрузки — это живые переключаемые состояния системы, которые можно использовать для обслуживания, восстановления и диагностики пока машина работает.

Цель

После этого урока ты сможешь объяснить что такое systemd target, перечислить ключевые targets и что каждый активирует, изменить target загрузки по умолчанию, использовать systemctl isolate для переключения targets на работающей системе, и сопоставить уровни выполнения SysV с их аналогами в systemd.

1

Target — это именованная точка синхронизации, а не скрипт и не номер уровня. Юнит .target в systemd — это юнит, единственная задача которого — притягивать зависимости. Когда systemd активирует multi-user.target, он разрешает граф зависимостей всего, что этот target хочет через Wants= или Requires=, запускает всё параллельно и отмечает target активным, когда все обязательные юниты подняты.

# Посмотреть, что multi-user.target притягивает
systemctl show multi-user.target -p Wants,Requires,After

# Список всех активных targets
systemctl list-units --type=target

Targets аддитивны: graphical.target зависит от multi-user.target, который зависит от basic.target, который зависит от sysinit.target. Активация graphical.target активирует всю цепочку.

2

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

TargetСостояниеТипичное использование
emergency.targetКорень только для чтения, минимальная оболочкаПовреждение файловой системы
rescue.targetКорень на чтение-запись, один пользовательРемонт конфига, нет сети
multi-user.targetПолный многопользовательский режим, без GUIСерверы, безголовые системы
graphical.targetМногопользовательский + менеджер дисплеяРабочие станции
reboot.targetПоследовательность перезагрузкиsystemctl reboot активирует это
poweroff.targetПоследовательность выключенияsystemctl poweroff

Разница между emergency и rescue: emergency вообще не запускает нормальную логику монтирования — ты получаешь минимальное окружение ядра с корнем только для чтения. Rescue выполняет нормальное раннее монтирование и даёт root-оболочку с файловой системой на чтение-запись.

3

Как просматривать и изменять target по умолчанию. Target по умолчанию — то, в чём systemd загружается автоматически. На сервере — multi-user.target; на рабочей станции — graphical.target.

# Посмотреть текущий target по умолчанию
systemctl get-default

# Изменить target по умолчанию (сохраняется между перезагрузками)
sudo systemctl set-default multi-user.target

# Эквивалентно: target по умолчанию — это симлинк
ls -la /etc/systemd/system/default.target

set-default просто обновляет симлинк /etc/systemd/system/default.target на выбранный файл target. Здесь нет ничего скрытого — это можно проверить через ls -la.

4

systemctl isolate переключает живую систему на другой target. Изоляция target запускает все юниты, необходимые этому target, и останавливает все юниты, которые не нужны ему. Это живой эквивалент перезагрузки в другой уровень выполнения, но без перезагрузки.

# Перейти в rescue-режим (убивает большинство сервисов, оставляет root-оболочку)
sudo systemctl isolate rescue.target

# Вернуться в полный многопользовательский режим
sudo systemctl isolate multi-user.target

# Не все targets можно изолировать — только те, у которых AllowIsolate=yes
systemctl show rescue.target -p AllowIsolate

Предупреждение: изоляция до rescue.target на продакшн-системе прервёт все работающие сервисы — сеть, базы данных, всё. Всегда предупреждай пользователей и подтверждай окно обслуживания перед этим на живой машине.

5

Сопоставление уровней выполнения SysV с targets systemd. Уровни выполнения SysV были числами от 0 до 6. systemd предоставляет совместимые targets, которые отображаются на них, чтобы скрипты, использующие runlevel или /etc/inittab, работали как шимы.

Уровень SysVTarget systemdСмысл
0poweroff.targetОстановка
1rescue.targetОдин пользователь
2, 3, 4multi-user.targetМногопользовательский, без GUI
5graphical.targetМногопользовательский + GUI
6reboot.targetПерезагрузка
# Команда runlevel по-прежнему работает (читает из systemd)
runlevel        # выводит предыдущий и текущий уровень выполнения как числа

# Старая команда telinit отображается на systemctl isolate
sudo telinit 1  # эквивалентно: systemctl isolate rescue.target
Разбор примера

Переключение сломанного рабочего стола в многопользовательский режим без перезагрузки.

Сценарий: Менеджер дисплея (gdm3) рабочей станции падает в цикл после обновления видеодрайвера. GUI недоступен, но машина доступна по SSH.

# Проверяем текущий target по умолчанию (вероятно graphical.target)
systemctl get-default

# Переключаемся на multi-user.target — убивает цикл менеджера дисплея
sudo systemctl isolate multi-user.target

# Теперь исправляем проблему с драйвером
sudo apt remove nvidia-driver-535
sudo apt install nvidia-driver-525

# Меняем target по умолчанию, чтобы при следующей загрузке не было сломанного GUI
sudo systemctl set-default multi-user.target

# Чистая перезагрузка с рабочим драйвером
sudo reboot

# После подтверждения работы восстанавливаем графический target по умолчанию
sudo systemctl set-default graphical.target

Ключевое: isolate позволил исправить проблему без цикла перезагрузок, сократив простой с «перезагрузка → сломанный цикл → перезагрузка» до одной запланированной перезагрузки в конце.

Почему это работает

В macOS нет targets systemd или уровней выполнения SysV. Эквивалент — домены launchd (system, user, GUI session), но концепции isolate нет — нельзя переключить работающий Mac в однопользовательский текстовый режим без перезагрузки в Recovery Mode. На Linux живопереключаемая система targets — это реальное операционное преимущество для серверов, которым нужно минимизировать простой.

Частая ошибка

Частая путаница: rescue.target vs emergency.target. Если система не может смонтировать корневую файловую систему (например, плохая запись в /etc/fstab), systemd может автоматически перейти в emergency.target — файловая система смонтирована только для чтения. Выполнение mount -o remount,rw / перед редактированием /etc/fstab — первое что нужно сделать. rescue.target достигается только когда корневая файловая система успешно смонтирована — если видишь rescue, диск в порядке; если emergency, подозревай проблему монтирования или файловой системы.

Проверь себя
Викторина

Ты хочешь постоянно настроить сервер на загрузку в multi-user.target вместо graphical.target. Какая команда это делает?

Итог

Target systemd — именованная точка синхронизации, объединяющая зависимые юниты. Ключевые серверные targets: emergency.target (ro-корень, минимальная оболочка), rescue.target (rw-корень, один пользователь), multi-user.target (полный сервер), graphical.target (сервер + рабочий стол). systemctl get-default и set-default читают и записывают target загрузки по умолчанию. systemctl isolate переключает живую систему на target — запускает что нужно, останавливает что не нужно. Уровни SysV 1, 3 и 5 отображаются на rescue, multi-user и graphical targets соответственно. emergency vs rescue: если файловая система не смонтировалась — emergency; если смонтировалась — rescue.

Практика

Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 4 завершено

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources1
expand
  1. 01

Trademarks belong to their respective owners. Editorial reference only.