systemd Linux (systemd)

systemd: сервис зависает на этапе stopping и блокирует выключение

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Служба systemd зависает при остановке, из-за чего выключение компьютера или перезагрузка задерживаются. Сначала установите, какой процесс и какой сигнал не обрабатываются; не уменьшайте таймаут до нуля ради быстрого выключения.

В этой статье
  1. Что происходит и когда это важно
  2. Возможные причины и как их отличить
  3. Пошаговая диагностика и исправление
  4. Команды из инструкции с пояснениями
  5. Как проверить результат
  6. Если проблема не устранена

#Что происходит и когда это важно

При выключении отображается «A stop job is running for ...», длительный обратный отсчёт. После следующей загрузки в журнале можно найти следы не завершившегося сервиса.

#Возможные причины и как их отличить

Возможная причинаКак узнатьЧто делать
Приложение не завершает соединенияВнутренний процесс ждёт сеть, диск или запрос.Лог приложения обрывается на shutdown.Исследовать активные операции и зависимость.
Неправильный ExecStopСкрипт остановки зависает или ссылается на недоступный ресурс.Статус после перезапуска содержит timeout in stop.Проверить unit и журнал ExecStop.
Очень длинный TimeoutStopSecНастроен большой интервал ожидания.В unit обнаружен явный TimeoutStopSec.Оценить необходимость и возможную потерю данных при сокращении.
Диск или сеть не отвечаютПри завершении зависают записи/сетевые тома.В журнале I/O errors или unmount timeout.Прекратить силовые выключения и проверить носитель.

#Пошаговая диагностика и исправление

  1. Запишите точный текст экрана остановкиСфотографируйте сообщение A stop job is running for ... и указанное имя unit. При первом зависании дождитесь завершения, если это допустимо: база данных может записывать изменения. Не отключайте питание повторно наугад.
  2. После загрузки проверьте журнал предыдущего сеансаОткройте Терминал и введите journalctl -b -1 -p warning --no-pager, если прежняя загрузка сохранена. Найдите имя службы, строки stop-sigterm timed out, Failed to stop или проблемы файловой системы. Если журнал предыдущей загрузки пуст, используйте актуальный журнал сервиса и настройте хранение отдельно.
  3. Просмотрите текущее состояние и unitВыполните systemctl status ИМЯ.service --no-pager, затем systemctl cat ИМЯ.service. Найдите Type, ExecStop, KillSignal, TimeoutStopSec и ExecStopPost. Не меняйте сразу все параметры: каждый может иметь значение для корректного завершения приложения.
  4. Проверьте последствия остановкиЕсли это БД, очередь заданий или сервер с клиентами, перед остановкой найдите в документации приложения его штатную процедуру сохранения и окончания задач. При удалённой машине не запускайте пробную остановку SSH, сети или хранилища из единственного подключённого сеанса.
  5. Сверьте таймауты и активные операцииКоманда systemctl show ИМЯ.service -p TimeoutStopUSec -p ExecStop -p KillSignal показывает итоговые параметры systemd. Для определения блокировок проверьте собственный журнал приложения; не используйте kill -9 как способ «лечения» сервисов с данными.
  6. Исправляйте узкую причинуЕсли журнал подтвердил неверную команду ExecStop, администратор сохраняет копию unit и исправляет именно её через override; затем daemon-reload и контрольный останов/пуск в окно обслуживания. Если виноват внешний ресурс, сначала восстановите его доступность. Уменьшение TimeoutStopSec без понимания может прервать запись данных.
  7. Проверьте выключение под наблюдениемПосле исправления выполните штатную перезагрузку в согласованное время, затем проверьте скорость выключения и предыдущий журнал. Если появились признаки повреждения файлов, верните настройку и остановите испытания.

#Команды из инструкции с пояснениями

Linux · Терминал (Bash)Команда
Предупреждения предыдущей загрузки, если они сохранены.
journalctl -b -1 -p warning --no-pager
Linux · Терминал (Bash)Команда
Просмотр параметров остановки.
systemctl cat ИМЯ.service
Linux · Терминал (Bash)Команда
Просмотр действующих настроек времени и сигналов.
systemctl show ИМЯ.service -p TimeoutStopUSec -p ExecStop -p KillSignal

#Как проверить результат

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

#Если проблема не устранена

Если неясно, какой процесс блокирует остановку, соберите название юнита, его настройки, логи приложения и сообщения предыдущей загрузки. С этими данными обратитесь к администратору.

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.