Ответ
Таргеты (цели) в 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). - Понимании процесса загрузки для диагностики проблем, когда сервис не стартует.