← Назад к вопросам

Что такое таргеты в systemd?

1.7 Middle🔥 131 комментариев
#Linux и администрирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое таргеты в systemd?

Таргеты (targets) в systemd — это специальные группы юнитов (units), которые представляют собой системные состояния или этапы загрузки, аналогичные «уровням выполнения (runlevels)» в классических системах SysV init. Однако таргеты более гибкие и мощные, поскольку они не просто определяют набор процессов для запуска, но могут описывать зависимости, требования и конфигурации, объединяя различные юниты (сервисы, монтирования, устройства) для достижения определённого состояния системы.

Основные особенности таргеты

  • Аналогия с runlevels: Например, таргет multi-user.target соответствует runlevel 3 (многопользовательский режим без GUI), graphical.target — runlevel 5 (с графическим интерфейсом). Однако таргеты могут быть более специализированными, например rescue.target для режима восстановления.
  • Группировка юнитов: Таргеты объединяют юниты через зависимости (Wants, Requires) или включение (AllowIsolate). Это позволяет управлять системой как набором состояний, а не отдельных процессов.
  • Иерархическая структура: Таргеты могут зависеть друг от друга, образуя цепочки. Например, graphical.target обычно включает multi-user.target, добавляя графические компоненты.

Примеры таргетов и их аналоги в SysV init

# Список доступных таргетов
systemctl list-unit-files --type=target

# Примеры:
# rescue.target      -> runlevel 1 (однопользовательский, восстановление)
# multi-user.target  -> runlevel 2,3,4 (многопользовательский без GUI)
# graphical.target   -> runlevel 5 (многопользовательский с GUI)
# shutdown.target    -> состояние завершения работы

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

Переход между таргетами осуществляется командой systemctl isolate, которая активирует новый таргет и деактивирует предыдущий (если он поддерживает изоляцию).

# Переход в графический режим
systemctl isolate graphical.target

# Установка таргета по умолчанию для загрузки
systemctl set-default graphical.target

Конфигурация таргета обычно находится в файлах /usr/lib/systemd/system/ (системные) или /etc/systemd/system/ (пользовательские). Например, содержимое multi-user.target может выглядеть так:

# /usr/lib/systemd/system/multi-user.target
[Unit]
Description=Multi-User System
Requires=basic.target
Wants=sysinit.target
After=basic.target sysinit.target
AllowIsolate=yes

Здесь ключевые параметры:

  • Requires: Таргет требует активации basic.target; если он не может быть запущен, таргет не будет активирован.
  • Wants: Таргет «хочет» активации `sysinit.target», но не зависит от него строго.
  • After: Определяет порядок — этот таргет запускается после указанных юнитов.
  • AllowIsolate: Позволяет использовать systemctl isolate для этого таргета.

Почему таргеты важны для DevOps?

В DevOps-практиках таргеты используются для:

  • Управления состоянием системы: Например, переключение между производственным (multi-user.target) и восстановительным (rescue.target) режимами при сбоях.
  • Автоматизации загрузки: Настройка таргета по умолчанию для серверов (без GUI) и рабочих станций (с GUI) через конфигурационные инструменты (Ansible, Puppet).
  • Интеграции с контейнерами и оркестрацией: В контейнерах systemd может управлять внутренними процессами через таргеты, обеспечивая корректную инициализацию.

Сравнение с SysV init

SysV init (runlevels)systemd (targets)
Фиксированные уровни 0-6Гибкие, пользовательские таргеты
Старт/стоп скриптыЮниты с зависимостями
Линейный порядокПараллельная загрузка с зависимостями

Таким образом, таргеты в systemd — это современный механизм управления состояниями системы, обеспечивающий более быструю загрузку, лучшую управляемость и интеграцию в автоматизированных инфраструктурах, что критически важно для DevOps-инженеров, работающих с масштабируемыми и отказоустойчивыми системами.