systemd
Система инициализации (PID 1) и менеджер сервисов на большинстве дистрибутивов Linux. Управляет unit'ами: services, sockets, timers, mounts, slices, scopes, targets, devices, paths, swap.
См. systemd(1), systemd.unit(5), systemctl(1).
Роль при загрузке
После раннего userspace (initramfs) управление обычно передаётся /sbin/init; на systemd-системах это symlink или wrapper на systemd. PID 1:
-
Чтение unit-файлов в порядке приоритета:
/etc/systemd/system/(локальная конфигурация, наивысший приоритет)/run/systemd/system/(runtime)/usr/lib/systemd/system/(vendor; на части дистрибутивов также/lib/systemd/system/) Полный список — вsystemd.unit(5).
-
Определение default target через symlink
/etc/systemd/system/default.target→ обычноmulti-user.targetилиgraphical.target. -
Параллельная активация unit'ов с учётом зависимостей (
Requires=,Wants=,Requisite=,BindsTo=,After=,Before=). -
Базовые сервисы:
systemd-udevd.service,systemd-journald.service,systemd-logind.service; сетевые компоненты — по конфигурации (systemd-networkd,NetworkManager,systemd-resolved). -
Монтирование через
.mountи.swapunit'ы (генерируются из/etc/fstabюнит-генераторомsystemd-fstab-generator). -
Переход к default.target.
При сбое — emergency.target (только корень в RO + sulogin) или rescue.target (корень смонтирован, базовые сервисы запущены, sulogin).
Управление ресурсами
systemd размещает services/scopes/slices в cgroup-иерархии и через неё управляет CPU, memory, IO и PIDs (systemd.resource-control(5)). На современных дистрибутивах часто используется cgroup v2, но режим зависит от сборки, ядра и параметров загрузки. Также поддерживает socket activation, automount и restart-политики.
Типы unit'ов
systemctl: основные команды
sudo systemctl start nginx.service
sudo systemctl stop nginx.service
sudo systemctl restart nginx.service
sudo systemctl reload nginx.service # SIGHUP/ExecReload
sudo systemctl reload-or-restart nginx.service
systemctl status nginx.service
systemctl is-active nginx.service
systemctl is-enabled nginx.service
systemctl is-failed nginx.service
sudo systemctl enable nginx.service
sudo systemctl disable nginx.service
sudo systemctl enable --now nginx.service # enable + start
sudo systemctl mask nginx.service # запретить запуск
sudo systemctl unmask nginx.service
sudo systemctl daemon-reload # перечитать unit-файлы
Targets
multi-user.target— многопользовательский CLI;graphical.target— графика поверхmulti-user.target;rescue.target— однопользовательский режим (sulogin, минимум сервисов);emergency.target— только sulogin на корне в RO;default.target— symlink на цель по умолчанию;network-online.target,sysinit.target,basic.target— этапы загрузки.
systemctl list-units --type=target
systemctl get-default
sudo systemctl set-default multi-user.target
sudo systemctl isolate rescue.target # переключить в target
journald
journalctl -u nginx.service # логи юнита
journalctl -b # текущая загрузка
journalctl -b -1 # предыдущая
journalctl --since "1 hour ago"
journalctl -p err # уровень >= err (priority как в syslog 0..7)
journalctl -f # tail -f
Постоянное хранение требует Storage=persistent в /etc/systemd/journald.conf и каталога /var/log/journal/.
Пример unit-файла
/etc/systemd/system/hello.service:
[Unit]
Description=Example service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/hello.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now hello.service
Диагностика
systemctl --failed
systemctl list-dependencies nginx.service
systemctl cat nginx.service # эффективный unit с drop-in'ами
systemctl show nginx.service # все свойства
systemd-analyze # время загрузки
systemd-analyze blame # сервисы по времени старта
systemd-analyze critical-chain
systemd-analyze verify /etc/systemd/system/hello.service