linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Процессы и ресурсы/systemd-targets

kb/processes ── Процессы и ресурсы ── intermediate

systemd targets - runlevels по-новому

Target - unit-файл `.target` который описывает желаемое состояние системы как набор зависимостей. Замена SystemV runlevels: `multi-user.target` ≈ runlevel 3, `graphical.target` ≈ runlevel 5.

view as markdownaka: target-unit, default-target, multi-user-target, graphical-target, runlevel

Что такое target

Target - это не процесс и не сервис. Это .target-unit, который не делает ничего сам, но через Wants= / Requires= тянет за собой набор других unit'ов. Достижение target = «все нужные сервисы подняты».

Аналогия из SystemV: target ≈ runlevel, но с зависимостями вместо пронумерованных скриптов в /etc/rc3.d/.

Маппинг с SystemV runlevels

SystemV runlevelsystemd targetЧто значит
0poweroff.targetВыключение
1 / Srescue.targetSingle-user, ФС смонтирована, root-shell
1 (deeper)emergency.targetТолько emergency-shell, ФС не монтируется
2multi-user.targetМногопользовательский без NFS (раньше)
3multi-user.targetCLI-сервер: всё крутится, без GUI
5graphical.targetСервер + display manager (GUI)
6reboot.targetПерезагрузка

Алиасы runlevel3.target → multi-user.target сохранены для обратной совместимости со старыми скриптами и командой init 3.

default.target - куда грузится система

/etc/systemd/system/default.target - symlink на canonical target:

bash
ls -l /etc/systemd/system/default.target

▸/usr/lib/systemd/system/graphical.target

Это то, что systemd подхватывает при старте если в kernel cmdline не передан systemd.unit=.... Менять руками ln -s не надо - есть команда:

bash
systemctl get-default                            # текущий
sudo systemctl set-default multi-user.target     # для серверов без GUI

Системные target'ы - полная цепочка boot

Они образуют дерево зависимостей. Идут от низкоуровневых к высокоуровневым:

sysinit.target          ← маунты, swap, sysctl, journald
     ↓
basic.target            ← timers.target, sockets.target, slices.target
     ↓
multi-user.target       ← все обычные демоны (sshd, nginx, postgres)
     ↓
graphical.target        ← + display-manager.service (gdm/lightdm)
     ↓
default.target          ← symlink на одно из вышеперечисленного

Параллельно есть «синхронизирующие» target'ы:

  • network.target - все network-units сконфигурированы (НЕ значит онлайн)
  • network-online.target - сеть реально готова, IP получен (для сервисов которые без интернета бесполезны)
  • local-fs.target - все локальные ФС из mount-and-fstab смонтированы
  • remote-fs.target - все NFS/SMB смонтированы
  • time-sync.target - время синхронизировано (см. chrony-and-ntp)

Как target собирает свои unit'ы

Два механизма:

1) Через [Install] секцию сервиса - когда ты делаешь systemctl enable nginx, создаётся symlink:

/etc/systemd/system/multi-user.target.wants/nginx.service
 → /usr/lib/systemd/system/nginx.service

Эта папка .wants/ (и .requires/) - то, что target подхватывает при старте.

2) Через директиву WantedBy= в самом target-файле - для системных целей.

bash
cat /usr/lib/systemd/system/graphical.target
# [Unit]
# Description=Graphical Interface
# Requires=multi-user.target
# Wants=display-manager.service
# After=multi-user.target display-manager.service
# AllowIsolate=yes

AllowIsolate=yes - критично: без этого target нельзя сделать default и нельзя переключиться через isolate.

Переключение между target'ами на лету

bash
sudo systemctl isolate multi-user.target    # уйти в CLI без reboot
sudo systemctl isolate graphical.target     # вернуть GUI
sudo systemctl isolate rescue.target        # ремонт без перезагрузки
sudo systemctl rescue                       # то же что isolate rescue.target
sudo systemctl emergency                    # экстренный shell

isolate останавливает всё что НЕ нужно для нового target и стартует то что нужно. Имя странное - но это оно.

Передача target через GRUB при загрузке

Если система не грузится в default.target - можно один раз перебить из GRUB. На экране меню - e для редактирования, в строке linux ... дописать:

systemd.unit=rescue.target

Дальше Ctrl+X для загрузки. Только этот раз - default не меняется.

Дебаг - что входит в target

bash
systemctl list-units --type=target              # активные target'ы
systemctl list-dependencies multi-user.target   # дерево всех unit'ов
systemctl list-dependencies --reverse nginx     # в какие target'ы попадает nginx
systemctl cat multi-user.target                 # итоговый файл

Создавать свой target имеет смысл редко - например для группы собственных сервисов которые включаются/выключаются вместе. Чаще достаточно WantedBy=multi-user.target в обычных юнитах.

§ команды

bash
systemctl get-default

В какой target грузится система при boot - обычно multi-user или graphical

bash
sudo systemctl set-default multi-user.target

Сделать сервер CLI-only - экономит ресурсы, не нужен display-manager

bash
sudo systemctl isolate rescue.target

Уйти в single-user mode на лету (без reboot) для ремонта

bash
systemctl list-dependencies multi-user.target

Показать всё дерево unit'ов которые тянет target - что реально стартует

bash
systemctl list-units --type=target --all

Все target'ы с их статусом - увидеть какие активны прямо сейчас

§ см. также

  • systemdsystemd - init и менеджер сервисовsystemd - init-система Linux: PID 1, который запускает всё остальное, следит за зависимостями, перезапускает упавшее, агрегирует логи.
  • cmd-systemctlsystemctl - управление сервисами systemd`systemctl` - главный CLI для управления unit'ами systemd: сервисами, таймерами, маунтами, сокетами. Замена SysV-init/`service` на современных дистро.
  • systemd-unit-typesТипы systemd-юнитовЮнит - управляемый systemd ресурс. Расширение файла = тип: `.service` (демон), `.socket` (lazy-старт по сокету), `.timer`, `.mount`, `.path`, `.slice`/`.scope` (cgroup'ы), `.target` (группа).
  • systemd-drop-inssystemd drop-ins - override без правки оригиналаDrop-in - `.conf` файл в `<unit>.d/` каталоге, который подмешивается к unit-файлу. Способ переопределить любую директиву unit'а **не правя оригинальный файл** из пакета.
  • prometheus-basicsPrometheus: scrape, TSDB, PromQL и production-pitfallsPrometheus - сервер мониторинга: сам опрашивает приложения по HTTP, собирает числовые метрики, хранит во встроенной БД ~15 дней. По ним строят графики в Grafana и алерты через Alertmanager. Стандарт de-facto в Kubernetes.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки