systemd Linux с systemd (конкретный дистрибутив и версия могут отличаться)

Служба зависает на этапе activating

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

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

Служба подолгу остаётся в состоянии activating, хотя процесс существует. Значение Type=notify/forking/oneshot определяет, что systemd считает завершённым запуском.

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

#Как распознать проблему и где применимы действия

Служба подолгу остаётся в состоянии activating, хотя процесс существует. Значение Type=notify/forking/oneshot определяет, что systemd считает завершённым запуском. Перед выполнением определите название программы, редакцию Linux и управляющий сервис. Значения примеров в командах не являются готовой конфигурацией вашего устройства.

#Возможные причины и диагностические признаки

Возможная причинаКак узнатьЧто делать
Type=notify без уведомленияДемон жив, но не отправляет READY=1Проверить поддержку sd_notify и соответствие Type
Type=forking с неверным PIDFileРодитель завершился, но PID основной программы не найденПроверить PIDFile и способ фонового запуска
ExecStartPre или oneshot долго выполняетсяЖурнал показывает ожидание предпускового скриптаДиагностировать конкретную долгую операцию

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

  1. Шаг 1. Определите, на чём задержался unitПосмотрите SubState и Type. В состоянии start-pre, start, start-post происходят разные действия. Не нажимайте Ctrl+C на серверном терминале: systemctl status ничего не меняет.
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; systemctl show "$UNIT" -p ActiveState -p SubState -p Type -p MainPID -p TimeoutStartUSec
  1. Шаг 2. Просмотрите запуск и ошибкиСопоставьте время последней попытки старта с журналом. Для Type=notify сообщение о превышении TimeoutStartSec может означать отсутствие READY=1, а не полный отказ процесса.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; journalctl -u "$UNIT" -b -n 120 --no-pager
  1. Шаг 3. Проверьте параметры ExecStartPre и PIDFileПокажите unit вместе с drop-in. Системные сервисы Type=forking обычно требуют корректно заданного способа определения главного процесса; нельзя произвольно менять Type на simple.
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; systemctl cat "$UNIT"
  1. Шаг 4. Посмотрите живой процесс и дочерние процессыsystemctl status показывает дерево cgroup; если PID есть, проверьте, не ожидает ли он сеть, секрет или зависимость. Не завершайте процесс до сохранения нужных данных.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; systemctl status "$UNIT" --no-pager -l
  1. Шаг 5. Проверьте синтаксис локального файлаЕсли в unit есть пользовательские изменения, проверьте фактический основной файл через systemd-analyze verify. Для пакета используйте путь из FragmentPath; отсутствие вывода обычно означает отсутствие проблем формата. Команды sudo или sudoedit выполняются с полномочиями администратора; если sudo не установлен, используйте разрешённую административную сессию.
    Linux · Терминал (Bash)КомандаНужен sudo
    Терминал Linux на сервере/клиенте, указанном в шаге. Нужны права администратора; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    sudo systemd-analyze verify /etc/systemd/system/имя.service
  1. Шаг 6. Исправьте только обнаруженную причинуЕсли приложение поддерживает notify, настройте его уведомление; если не поддерживает, согласно документации приложения подберите Type. Изменения вносите через drop-in, затем daemon-reload; restart только при согласованном простое. Команды sudo или sudoedit выполняются с полномочиями администратора; если sudo не установлен, используйте разрешённую административную сессию.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Терминал Linux на сервере/клиенте, указанном в шаге. Нужны права администратора; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    sudo systemctl edit имя.service
    sudo systemctl daemon-reload

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

#Как проверить, что проблема действительно устранена

Проверка: SubState должен перейти в running (либо dead для успешно завершившегося oneshot), без нового ожидания timeout. Если всё ещё activating, не увеличивайте TimeoutStartSec вслепую — выясните, какую готовность systemd ожидает.

#Если результат не получен

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

Так эту ошибку тоже называют

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

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