Systemd: полное руководство для сисадминов
Зачем нужен systemd
Раньше в Linux использовался SysVinit: скрипты запускались последовательно, зависшие службы нельзя было нормально отследить, логов в едином месте не было.
Systemd появился в 2010-м и решил все эти проблемы. Сегодня он используется почти во всех дистрибутивах Linux.
Systemd объединяет управление службами, ресурсами и логами в единый механизм. Это делает Linux-систему быстрее, прозрачнее и удобнее для администрирования.
Из чего состоит systemd
Systemd — это не одна программа, а целый набор инструментов:
-
systemd (PID 1) — главный процесс, управляющий всем остальным;
-
systemctl — утилита для управления;
-
journald — единая система журналирования;
-
отдельные сервисы для управления сетью, временем, пользователями и оборудованием.
Юниты
В systemd всё завязано на юниты (unit). Это конфигурационные файлы, которые описывают службы, таймеры, точки монтирования и другие объекты системы.
Основные типы:
-
.service— процессы и демоны; -
.socket— запуск по сокету; -
.timer— планировщик (замена cron); -
.path,.mount,.target— контроль файлов, точек монтирования, состояний системы.
Структура юнита:
-
[Unit] — описание и зависимости;
-
[Service] — как именно запускать процесс;
-
[Install] — как он привязывается к целям (target).
Типы сервисов
Через параметр Type= можно настроить поведение:
-
simple — процесс считается запущенным сразу;
-
forking — для классических демонов, которые "отделяются";
-
oneshot — однократные действия;
-
notify — сервис сам сообщает, что готов;
-
dbus — службы, работающие через D-Bus.
Зависимости и параллелизм
Systemd строит граф зависимостей между юнитами и запускает их максимально параллельно. Это ускоряет загрузку системы и делает её более управляемой.
Контроль ресурсов через cgroups
Каждая служба работает в своей cgroup, что позволяет:
-
отслеживать все её процессы;
-
ограничивать память, CPU и другие ресурсы;
-
гарантированно убивать всё, что связано с юнитом;
-
анализировать нагрузку через
systemd-cglsиsystemd-cgtop.
Журналы
Вместо разрозненных логов systemd использует journald:
-
бинарный формат с метаданными (PID, юнит, команда и др.);
-
просмотр через
journalctlс фильтрацией по времени, уровню и сервисам; -
удобный анализ ошибок прямо в терминале.
D-Bus
Все утилиты (включая systemctl) общаются с systemd через D-Bus — это единый и безопасный канал обмена сообщениями.
Основные команды
-
Управление сервисами:
systemctl start/stop/restart/reload <unit> -
Проверка:
systemctl status <unit> -
Автозагрузка:
systemctl enable/disable <unit> -
Ошибки:
systemctl --failed -
Логи:
journalctl -u <unit>,journalctl -f -
Время загрузки:
systemd-analyzeиsystemd-analyze blame
