systemd — система инициализации (init) и менеджер служб для Linux. Выступает первым процессом (PID 1), запускаемым ядром после загрузки. Отвечает за старт всех системных и пользовательских служб, управление их зависимостями и жизненным циклом.
Как работает
systemd управляет юнитами (units) — файлами конфигурации с расширениями .service, .socket, .timer, .target и др. Службы запускаются параллельно с учётом зависимостей: если сервис A зависит от B, systemd запустит B первым. Это ускоряет загрузку по сравнению с последовательным SysV init.
Основные команды:
systemctl start nginx # запустить сервис
systemctl stop nginx # остановить
systemctl enable nginx # добавить в автозагрузку
systemctl status nginx # статус
journalctl -u nginx -f # логи сервиса
journald — компонент systemd для централизованного сбора логов в бинарном формате. Запрос логов: journalctl -u nginx --since "1 hour ago". cgroups-интеграция позволяет ограничить ресурсы сервиса: MemoryMax=512M, CPUQuota=50% в .service файле.
История
systemd разработан Леннартом Поттерингом и Кеем Сиверсом в 2010 году. Включён в Fedora 15 (2011). Debian принял systemd в 2014 году (версия 7/8). Ubuntu перешла с Upstart на systemd в 15.04 (2015). К 2016 году systemd стал стандартом для всех основных дистрибутивов.
Связь с хостингом
На VPS системный администратор работает с systemd ежедневно: создаёт .service-юниты для приложений (Node.js, Python, Java), настраивает автозапуск, читает логи через journalctl. Пример .service-юнита для Node.js-приложения добавляется в /etc/systemd/system/myapp.service и управляется через systemctl.
Основные концепции systemd
Unit-файлы описывают сервисы (.service), сокеты (.socket), таймеры (.timer), монтирование (.mount). systemctl start/stop/enable/disable/status имя.service. journalctl -u имя.service -f — логи в реальном времени. Зависимости через After=, Requires=, Wants=.
Создание сервиса
Файл /etc/systemd/system/myapp.service: [Service]
ExecStart=/usr/bin/node /app/server.js
Restart=always
User=www-data. [Install]
WantedBy=multi-user.target. После создания: systemctl daemon-reload && systemctl enable --now myapp.
systemd в хостинге
Автозапуск Nginx, PHP-FPM, MySQL, приложений. Ограничение ресурсов: CPUQuota=50%, MemoryMax=512M — изоляция сервисов в пределах одного VPS. systemd-timer как замена cron с зависимостями и логированием.
systemd-networkd
systemd-networkd: альтернатива NetworkManager для серверов. Конфиг в /etc/systemd/network/. Поддержка VLAN, bonding, bridge. Быстрее поднимает сетевые интерфейсы при загрузке. На Ubuntu 22.04: Netplan → systemd-networkd бэкенд по умолчанию. networkctl status — статус интерфейсов.
Анализ проблем загрузки
systemd-analyze — общее время загрузки. systemd-analyze blame — топ медленных сервисов. systemd-analyze critical-chain — критический путь загрузки. Оптимизация: отключить неиспользуемые сервисы (systemctl disable avahi-daemon). Для VPS загрузка: 5–15 секунд норма.
systemd управляет всеми ключевыми сервисами: Nginx, PostgreSQL, Docker, SSH-демон. systemd-timer заменяет cron. journald собирает логи всех сервисов. Ubuntu, Debian, Rocky Linux используют systemd как init.