A stop job is running: выключение висит
Строка «A stop job is running for …» означает, что systemd ждёт завершения службы. По истечении таймаута остановки процесс будет добит, но выключение задержится ровно на это время — обычно на 90 секунд.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Служба не реагирует на сигнал завершения
Программа игнорирует сигнал или ждёт чего-то внешнего. systemd терпеливо ждёт таймаут, потом добивает.
-
Служба ждёт завершения сетевых операций
При выключении сеть может быть уже частично разобрана, и служба ждёт ответа, которого не будет.
-
Подвисло размонтирование сетевого каталога
Жёсткое монтирование ждёт сервер бесконечно, и выключение упирается в это.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Журнал прошлой загрузки: что именно держало выключение.
journalctl -b -1 --no-pager | grep -iE "stop job|timed out" | tail -20Таймаут и сигнал остановки службы.
systemctl show имя.service -p TimeoutStopSec -p KillSignalЗаодно видно медленные при запуске службы: часто это те же.
systemd-analyze blame | head -10Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Программа игнорирует сигнал или ждёт чего-то внешнего. systemd терпеливо ждёт таймаут, потом добивает.
- Как проверить
-
Найдите службу в журнале прошлого выключения.
journalctl -b -1 --no-pager | grep -iE "stop job|timed out|SIGKILL" | tail -20
- Как исправить
-
Убедитесь, что программа обрабатывает сигнал, или задайте нужный ей сигнал через
KillSignal=. Сократить общее ожидание можноTimeoutStopSec=, но это лечение симптома.
- Почему происходит
- При выключении сеть может быть уже частично разобрана, и служба ждёт ответа, которого не будет.
- Как проверить
-
Посмотрите порядок остановки в журнале.
journalctl -b -1 --no-pager | tail -60
- Как исправить
- Объявите зависимость от сети: тогда служба будет остановлена до её разбора.
- Почему происходит
- Жёсткое монтирование ждёт сервер бесконечно, и выключение упирается в это.
- Как проверить
-
Посмотрите монтирования и их параметры.
findmnt -t nfs4,nfs,cifs -o TARGET,OPTIONS
- Как исправить
- Для сетевых каталогов используйте мягкое монтирование с таймаутами.
Пример вывода
Выключение ждёт службу с игнорируемым сигналом. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
[ *** ] A stop job is running for myapp.service (1min 20s / 1min 30s)
systemd[1]: myapp.service: State 'stop-sigterm' timed out. Killing.
systemd[1]: myapp.service: Killing process 1200 (myapp) with signal SIGKILL.
Связанные ошибки
- Failed with result 'timeout' Состояние timeout: служба не уложилась в отведённое время при запуске, остановке или перезагрузке настроек.
- signal=KILL (status=9/KILL) в systemd Процесс службы убит сигналом KILL. Кто мог его послать: OOM-killer, таймаут остановки systemd, администратор.
- Сетевой каталог подвисает: жёсткое монтирование NFS Обращение к каталогу NFS блокируется намертво: жёсткое монтирование без таймаутов. Как настроить устойчиво.
- signal=TERM (status=15/TERM) в systemd Процесс службы завершён сигналом TERM. Когда это нормальная остановка, а когда признак проблемы.
- A start job is running: загрузка висит на одной службе Загрузка останавливается с обратным отсчётом: служба не укладывается в таймаут. Как найти виновника и не ждать.
- Connection timed out в журнале службы Соединение не устанавливается по таймауту: пакеты отбрасываются, узел недоступен, перегружен сервер на другой стороне.
- Gunicorn: WORKER TIMEOUT в журнале службы Рабочие процессы Gunicorn убиваются по таймауту: медленные запросы, блокирующие вызовы, неверный тип обработчика.
- Job for … failed because a timeout was exceeded Задание на запуск прервано по таймауту. Как отличить медленный старт от заблокированного и правильно настроить TimeoutStartSec.
Источники
-
systemd.service(5)
TimeoutStopSec= и последовательность остановки. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено службой, игнорирующей сигнал завершения.