systemd — что это и зачем
Систем-менеджер и init-процесс с PID 1 в современных Linux-дистрибутивах. Запускает все остальные процессы, управляет сервисами через unit-файлы, собирает логи в journald и держит цепочку зависимостей при загрузке. На Ubuntu используется с 15.04.
systemd
Систем-менеджер и init-процесс с PID 1 в современных Linux-дистрибутивах. Запускает все остальные процессы, управляет сервисами через unit-файлы, собирает логи в journald и держит цепочку зависимостей при загрузке. На Ubuntu используется с 15.04.
Что это в одном абзаце
После загрузки ядра Linux первым в пользовательском пространстве запускается процесс с PID 1 — он отвечает за поднятие всей остальной системы. На современной Ubuntu этот процесс — systemd. Раньше эту роль играл SysV init со скриптами в /etc/init.d/, потом был upstart; с 2015 года стандарт — systemd.
Команда systemctl — это клиент для общения с PID 1. Когда вы пишете sudo systemctl restart nginx, вы шлёте команду демону systemd, который перезапускает указанный сервис.
Из чего он состоит
systemd — это не только init. Это набор связанных компонентов:
- systemd (PID 1) — собственно менеджер: парсит unit-файлы, поднимает сервисы, держит зависимости.
- systemctl — CLI для управления: start, stop, enable, status, daemon-reload.
- journald — централизованный сборщик логов.
journalctl -u nginxдостаёт логи конкретного сервиса. - logind — отслеживает пользовательские сессии, отвечает за
loginctlи user-сервисы. - resolved — локальный DNS-резолвер (
/etc/resolv.confуказывает на127.0.0.53). - timesyncd — простой NTP-клиент для синхронизации времени.
- udevd — обработчик горячего подключения устройств (правила в
/etc/udev/rules.d/). - timers — замена cron, описывает задачи через unit-файлы
*.timer.
Все эти компоненты — часть одного дистрибутива systemd, но многие можно выключить и заменить: например, resolved отключают в пользу прямого /etc/resolv.conf или unbound.
Чем заменил предшественников
| Старое решение | systemd-аналог |
|---|---|
init.d/<service> — shell-скрипты |
unit-файлы *.service |
update-rc.d enable |
systemctl enable |
service nginx restart |
systemctl restart nginx |
cron/anacron |
*.timer units |
syslog, rsyslog |
journalctl (часто параллельно) |
inetd/xinetd |
*.socket units |
Главные плюсы такой замены:
- Параллельный запуск при загрузке через граф зависимостей — система поднимается за секунды, а не последовательные «звёздочки» SysV.
- Декларативный конфиг в unit-файлах вместо длинных bash-скриптов.
- Надзор — systemd знает, жив ли сервис, и может рестартовать его при падении (
Restart=always). - Централизованные логи — не нужно знать, в какой
/var/log/<service>.logсмотреть, всё черезjournalctl -u <service>.
Что такое systemctl
systemctl — основной CLI-инструмент для общения с systemd. Часто встречается в поиске как «systemctl linux что это» — это и есть ответ. Базовые команды:
sudo systemctl start nginx # запустить сейчас
sudo systemctl stop nginx # остановить сейчас
sudo systemctl restart nginx # перезапустить
sudo systemctl reload nginx # перечитать конфиг без рестарта
sudo systemctl enable nginx # добавить в автозагрузку
sudo systemctl disable nginx # убрать из автозагрузки
sudo systemctl status nginx # текущее состояние и последние строки журнала
sudo systemctl daemon-reload # перечитать unit-файлы после правок
Подробный разбор systemctl enable, шорткат --now и написание собственного unit-файла — в гайде по systemctl и systemd unit.
Где systemd используется в типичных задачах
- nginx как сервис. При
apt install nginxпакет приносит unit-файл, и сервис управляется черезsystemctl. См. nginx reverse proxy. - docker compose как сервис. Для автозапуска compose-стека после ребута оборачивают
docker compose up -dв unit-файлType=oneshot. См. docker compose на Ubuntu. - SSH-демон. В Ubuntu 24.04 это
ssh.serviceилиssh.socket(socket-activation) — нюанс важен при смене порта SSH. См. SSH-ключи Ubuntu. - Автообновления.
unattended-upgradesзапускается черезapt-daily-upgrade.timer— стандартный systemd-таймер. См. apt update и apt upgrade. - Снапшоты btrfs. snapper собирает периодические снимки через
snapper-timeline.timer. См. btrfs снапшоты и subvolume.
Частые вопросы
Что делает systemd в Linux
Запускает первым после ядра, получает PID 1 и поднимает всё остальное: ядро передаёт ему управление, дальше systemd читает unit-файлы из /etc/systemd/system/ и /lib/systemd/system/, разрешает зависимости и параллельно стартует сервисы. Также управляет логами (через journald), таймерами и пользовательскими сессиями.
Чем systemd отличается от init
SysV init запускал скрипты последовательно, по приоритетам в названии файлов (S20syslog, S21nginx). systemd использует декларативные unit-файлы, разрешает зависимости графом и стартует сервисы параллельно — отсюда выигрыш по времени загрузки. Кроме того, systemd следит за процессами после старта и может рестартовать их при падении.
В чём разница между systemd и systemctl
systemd — это сам процесс PID 1, init и менеджер сервисов. systemctl — CLI-клиент, через который вы отдаёте команды этому процессу. Можно сравнить с docker и docker-cli: docker — демон, docker — это команда для общения с ним.
На каких дистрибутивах используется systemd
Ubuntu (с 15.04), Debian (с 8), Fedora (с 15), CentOS/RHEL (с 7), Arch, openSUSE. Без systemd: Alpine Linux (использует OpenRC), Void Linux (runit), Devuan (специально форкнутый Debian без systemd), Gentoo (по выбору).
Как посмотреть все запущенные сервисы systemd
systemctl list-units --type=service --state=running — список активных сервисов. systemctl list-unit-files — все unit-файлы (включая отключённые). systemctl --failed — только упавшие сервисы.
Что почитать
- systemctl enable: включаем сервис в автозагрузку и пишем свой unit — основной практический гайд: разница
start/enable, шорткат--now, написание собственного unit-файла, daemon-reload, user-сервисы, troubleshooting. - docker compose на Ubuntu — как запустить compose-стек как systemd-сервис с автостартом.
- apt update и apt upgrade — управление автообновлениями через unattended-upgrades + systemd-таймер.