Обновлено:

systemd service checks

systemd управляет сервисами: Nginx, certbot timer, приложениями, worker-процессами и разными фоновых службами.

Когда сервис “не работает”, не начинайте сразу перезапускать всё подряд. Сначала посмотрите состояние, последние ошибки и зависимости.

Проверить статус сервиса

sudo systemctl status nginx --no-pager

Что смотреть:

  • Active: active (running) — сервис запущен;
  • Active: failed — сервис упал;
  • Loaded: — найден ли unit-файл;
  • последние строки лога внизу вывода.

Проверить все failed units

sudo systemctl --failed

Если список пустой — хорошо.

Если есть failed unit, посмотрите его отдельно:

sudo systemctl status service-name --no-pager

Проверить, включён ли автозапуск

sudo systemctl is-enabled nginx

Возможные ответы:

ОтветСмысл
enabledстартует при загрузке
disabledне стартует автоматически
staticне включается напрямую, может запускаться зависимостями
maskedзапуск запрещён

Запустить, остановить, перезапустить

sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx

Для production осторожнее с restart: он останавливает и запускает сервис заново.

Reload вместо restart

Если сервис поддерживает reload, лучше использовать его для перечитывания конфигурации:

sudo systemctl reload nginx

Для Nginx правильный порядок:

sudo nginx -t
sudo systemctl reload nginx

Если nginx -t не прошёл, reload не делать.

Посмотреть логи сервиса

sudo journalctl -u nginx --no-pager -n 100

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

sudo journalctl -u nginx -f

Смотреть за последний час:

sudo journalctl -u nginx --since "1 hour ago" --no-pager

Проверить таймеры

Для scheduled jobs:

sudo systemctl list-timers

Например, certbot:

sudo systemctl list-timers | grep certbot
sudo systemctl status certbot.timer --no-pager

Если сервис не стартует

Порядок:

sudo systemctl status service-name --no-pager
sudo journalctl -u service-name --no-pager -n 100
sudo systemctl cat service-name

Что искать:

  • неверный путь к бинарнику;
  • нет прав на файл;
  • порт уже занят;
  • ошибка в конфиге;
  • переменная окружения не задана;
  • сервис быстро падает после старта.

Проверить, какой порт слушает сервис

sudo ss -lntp | grep -E ':(80|443|7443)\b'

Если сервис должен слушать порт, но его нет в ss, значит он не стартовал или слушает другой адрес.

Посмотреть unit-файл

sudo systemctl cat nginx

Для custom override:

sudo systemctl cat service-name
sudo systemctl edit service-name

После изменения unit-файла:

sudo systemctl daemon-reload
sudo systemctl restart service-name

Безопасный порядок диагностики

sudo systemctl status service-name --no-pager
sudo journalctl -u service-name --no-pager -n 100
sudo systemctl --failed
sudo ss -lntp

Только после этого решать: reload, restart, rollback или правка конфига.

Частые ошибки

Перезапуск без проверки конфига

Для Nginx плохо:

sudo systemctl restart nginx

Лучше:

sudo nginx -t
sudo systemctl reload nginx

Игнор failed units

Если сервис упал, systemctl --failed покажет это быстрее, чем поиск по логам.

Смотреть не тот service name

Иногда сервис называется не так, как ожидается. Найти:

systemctl list-units --type=service | grep -i nginx

Не сделать daemon-reload

После изменения unit-файла нужен:

sudo systemctl daemon-reload

Иначе systemd может использовать старую версию unit.