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.