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

Служба постоянно перезапускается из-за Restart=always

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

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

Служба с Restart=always повторно запускается даже после штатного выхода приложения. Разделяйте нормальное завершение, аварию, Type=oneshot и циклы с ограничением частоты.

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

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

Служба с Restart=always повторно запускается даже после штатного выхода приложения. Разделяйте нормальное завершение, аварию, Type=oneshot и циклы с ограничением частоты. Перед выполнением определите название программы, редакцию Linux и управляющий сервис. Значения примеров в командах не являются готовой конфигурацией вашего устройства.

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

Возможная причинаКак узнатьЧто делать
Политика всегда перезапускатьВ systemctl show виден Restart=always, приложение быстро завершается с 0Поменять политику только если это соответствует назначению сервиса
Приложение аварийно завершаетсяВ журнале есть ненулевой код выхода или сигналСначала исправить ошибку процесса
Неподходящий тип службыОдноразовая задача настроена как долгоживущий демонПроверить Type и RemainAfterExit

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

  1. Шаг 1. Установите фактический циклНе перезапускайте службу ещё раз. Посмотрите NRestarts и ActiveState; несколько PID за короткое время — признак цикла, а не обычной нагрузки.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; systemctl show "$UNIT" -p Restart -p Type -p NRestarts -p ExecMainStatus -p ActiveState
  1. Шаг 2. Посмотрите сообщения конкретного циклаВ журнале найдите строку выхода главного процесса и сообщения Scheduled restart job. Нулевой exit status при Restart=always означает перезапуск согласно политике, а не обязательную ошибку.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; journalctl -u "$UNIT" -b -n 80 --no-pager
  1. Шаг 3. Прочитайте все переопределенияВ unit проверьте [Service] Restart, Type, ExecStart и конфигурации .d/*.conf. Если это oneshot, нельзя механически делать Restart=always для успешных запусков.
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; systemctl cat "$UNIT"
  1. Шаг 4. Сделайте резервную копию настройкиПеред изменением сохрани́те в защищённом каталоге актуальную конфигурацию без секретов в публичном доступе. Команда cat предназначена для локальной копии просмотра, не для замены файлов в /usr/lib.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; systemctl cat "$UNIT" > "$HOME/systemd-unit-before.txt"
  1. Шаг 5. Исправьте политику контролируемоЕсли программе не нужно запускаться после успешного завершения, откройте drop-in. В редакторе добавьте строки [Service] и Restart=on-failure; пустые строки не обязательны. Для систем, где автостарт вообще не нужен, выбирайте Restart=no. Не меняйте продакшен-сервис без согласования. Команды sudo или sudoedit выполняются с полномочиями администратора; если sudo не установлен, используйте разрешённую административную сессию.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Терминал Linux на сервере/клиенте, указанном в шаге. Нужны права администратора; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    sudo systemctl edit имя.service

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

  1. Шаг 6. Примените изменение и оцените рестартыПосле сохранения проверьте значение Restart, потом контролируемо перезапустите сервис. Если приложение снова падает, ищите первопричину ошибки вместо увеличения StartLimitBurst. Команды sudo или sudoedit выполняются с полномочиями администратора; если sudo не установлен, используйте разрешённую административную сессию.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Терминал Linux на сервере/клиенте, указанном в шаге. Нужны права администратора; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; sudo systemctl daemon-reload
    sudo systemctl restart "$UNIT"
    systemctl show "$UNIT" -p Restart -p NRestarts

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

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

Подождите время, за которое раньше происходило 2–3 перезапуска, и повторите NRestarts: счётчик не должен расти самопроизвольно. Восстановление: sudo systemctl revert ИМЯ.service удаляет все местные переопределения, поэтому лучше адресно удалить только свои строки через systemctl edit.

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

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

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

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

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