Как устроены службы systemd
Что происходит при запуске service: unit-файлы, зависимости, перезапуск и диагностика.
· 7 мин чтения
Что такое unit
systemd управляет не только процессами, но и любыми ресурсами системы, описанными как unit: службами (.service), таймерами (.timer), точками монтирования (.mount), сокетами (.socket).
Unit-файлы лежат в /usr/lib/systemd/system/ (поставляются пакетами) и /etc/systemd/system/ (ваши настройки). Файлы в /etc имеют приоритет, поэтому пакетные юниты не редактируют напрямую.
systemctl edit имя.service: изменения попадут в drop-in каталог и переживут обновление пакета.Минимальный service
Простая служба состоит из трёх секций: что это, как запускать, когда включать.
[Unit]
Description=Мой фоновый сервис
After=network-online.target
Wants=network-online.target[Service] Type=simple User=app ExecStart=/opt/app/bin/server --config /etc/app/config.yml Restart=on-failure RestartSec=3
[Install] WantedBy=multi-user.target
After= задаёт порядок запуска, Wants= создаёт мягкую зависимость. Это разные вещи: порядок без зависимости не запустит нужный unit.
Запуск и автозагрузка
После создания файла systemd нужно сказать, что конфигурация изменилась.
sudo systemctl daemon-reload
sudo systemctl enable --now app.service
systemctl status app.serviceenable лишь создаёт символическую ссылку для автозапуска, start запускает сейчас. Флаг --now делает оба действия.
Перезапуск и зависимости
Политика Restart= определяет, когда systemd перезапустит процесс. on-failure перезапускает при ненулевом коде выхода или аварийном завершении, always — при любом завершении.
StartLimitIntervalSec и StartLimitBurst и смотрите в журнал.Диагностика
Первым делом смотрим статус и последние строки журнала, затем — полный журнал только этой службы.
systemctl status app.service
journalctl -u app.service -b --no-pager | tail -50
systemd-analyze verify /etc/systemd/system/app.serviceЧастые коды: 203/EXEC — не найден или не исполняется файл из ExecStart, 217/USER — указанного пользователя нет, 200/CHDIR — неверный WorkingDirectory.
Вывод
Служба systemd — это декларативное описание процесса. Пишите минимальный unit, проверяйте его через systemd-analyze verify, меняйте по одному параметру и читайте журнал службы. Так диагностика занимает минуты, а не часы.
Связанные статьи
Диагностика сети Linux: от ping до tcpdump
Последовательный подход к сетевым проблемам: интерфейс, маршрут, DNS, порт, пакеты.
systemd timers вместо cron
Как запускать задачи по расписанию с журналом, зависимостями и ограничениями.