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.