Что такое таргеты (targets) в systemd и какова их роль в управлении системой?

«Что такое таргеты (targets) в systemd и какова их роль в управлении системой?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Таргеты (цели) в systemd — это специальные юниты, которые группируют другие юниты (сервисы, сокеты, монтирования) для достижения определённого состояния системы. Они являются точками синхронизации и заменяют традиционные уровни выполнения (runlevels) из SysVinit.

Основная роль: Организация загрузки и изменения состояния системы через зависимости. При активации таргета systemd запускает все юниты, которые на него ссылаются (WantedBy= или RequiredBy=).

Ключевые таргеты:

  • default.target — символическая ссылка на целевой таргет по умолчанию (аналог runlevel).
  • multi-user.target — состояние многопользовательской системы без графического интерфейса (аналог runlevel 3).
  • graphical.target — состояние с запущенным графическим сервером (аналог runlevel 5).
  • rescue.target — однопользовательский аварийный режим.
  • reboot.target, poweroff.target — цели для перезагрузки и выключения.

Практическое использование:

# Узнать текущий таргет по умолчанию
systemctl get-default

# Установить multi-user.target как цель по умолчанию
sudo systemctl set-default multi-user.target

# Переключить систему в режим без графики (изолировать таргет)
sudo systemctl isolate multi-user.target

# Просмотреть все юниты, входящие в конкретный таргет
systemctl list-dependencies graphical.target

# Создать кастомный таргет для определённого состояния (например, «деплой»)
# Файл: /etc/systemd/system/deploy.target
[Unit]
Description=Deployment State
Requires=network-online.target docker.service
After=network-online.target docker.service
Wants=my-app.service
AllowIsolate=yes

Для DevOps-инженера таргеты важны при:

  • Настройке автоматического запуска стека сервисов (БД, кеш, приложение) в определённом порядке.
  • Создании собственных состояний системы для этапов пайплайна (например, pre-deploy.target, maintenance.target).
  • Понимании процесса загрузки для диагностики проблем, когда сервис не стартует.