Linux Reference

Полезные команды systemd для диагностики сервисов

Справочник по systemctl и journalctl: как понять, почему сервис не стартует, где искать логи и что делать с зависшими юнитами.

Проверено: Ubuntu 24.04, Debian 12 Версия: systemd 255 Нужно знать: Базовый Linux, работа с SSH
Полезные команды systemd для диагностики сервисов

systemd управляет почти всем на современном Linux-сервере. Эти команды покрывают 90% ситуаций, когда нужно быстро понять, что происходит с сервисом.

Что решает этот справочник

Набор команд для диагностики: проверка состояния, чтение логов, поиск упавших юнитов, анализ времени загрузки, работа с зависимостями.

Состояние сервисов

Подробный статус одного сервиса — первое, что стоит смотреть:

systemctl status nginx

В выводе обращайте внимание на три вещи: строку Active (состояние и сколько времени в нём), Main PID и последние строки лога внизу — там обычно и лежит причина падения.

Все упавшие юниты разом:

systemctl --failed

Короткая проверка для скриптов — возвращает только слово:

systemctl is-active nginx
systemctl is-enabled nginx

Список всех сервисов с их состоянием:

systemctl list-units --type=service --state=running

Логи через journalctl

Логи конкретного сервиса, последние 50 строк:

journalctl -u nginx -n 50 --no-pager

Ключ --no-pager отключает постраничный вывод — полезно в скриптах и при копировании.

Следить за логом в реальном времени:

journalctl -u nginx -f

Только ошибки и выше по уровню важности:

journalctl -p err -b

Ключ -b ограничивает вывод текущей загрузкой. Чтобы посмотреть предыдущую — -b -1.

За временной промежуток:

journalctl --since "2026-09-15 10:00" --until "2026-09-15 11:00"
journalctl --since "1 hour ago"

Совет. Ключи можно комбинировать: journalctl -u ssh -p warning --since today покажет предупреждения и ошибки SSH за сегодня.

Управление сервисами

systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl reload nginx

Разница между restart и reload важна: reload перечитывает конфиг без разрыва активных соединений, restart убивает процесс и поднимает заново. Для веб-серверов почти всегда нужен reload.

Автозапуск:

systemctl enable nginx
systemctl disable nginx
systemctl enable --now nginx

Ключ --now включает автозапуск и сразу стартует сервис — экономит одну команду.

Юнит-файлы

Посмотреть содержимое юнита:

systemctl cat nginx

Правильный способ изменить параметры — override-файл, а не правка оригинала:

systemctl edit nginx

Команда создаст /etc/systemd/system/nginx.service.d/override.conf. Оригинальный юнит при обновлении пакета перезапишется, ваш override — нет.

После ручной правки файлов:

systemctl daemon-reload

Зависимости и загрузка

Что требуется сервису для запуска:

systemctl list-dependencies nginx

Сколько заняла загрузка системы:

systemd-analyze
systemd-analyze blame | head -15

blame сортирует юниты по времени запуска — быстрый способ найти, что тормозит загрузку.

Таймеры

systemd-таймеры постепенно заменяют cron. Посмотреть активные:

systemctl list-timers --all

Колонки NEXT и LAST показывают следующий и прошлый запуск.

Возможные проблемы

Сервис перезапускается по кругу

В статусе будет видно растущее число в скобках после Active. Смотрите логи с ограничением по времени:

journalctl -u имя_сервиса --since "10 minutes ago" -p err

Юнит завис в состоянии deactivating

Процесс не реагирует на SIGTERM. Принудительно:

systemctl kill -s SIGKILL имя_сервиса

Изменения в юните не применяются

Забыт daemon-reload. systemd кэширует юниты в памяти и не перечитывает файлы автоматически.

Осторожно. systemctl mask не просто отключает сервис, а делает его запуск невозможным — даже как зависимость другого юнита. Снимается через systemctl unmask. Не используйте вместо обычного disable.

Итог

Минимальный набор для диагностики: systemctl status для состояния, journalctl -u имя -n 50 для логов, systemctl --failed для обзора упавшего. При правке юнитов всегда используйте systemctl edit, а не прямое редактирование файлов в /lib/systemd.