SystemdDoctor
мешает работе lsb остановка execstop

status=7/NOTRUNNING в systemd

Код 7 означает «программа не работает» и чаще всего приходит не от запуска, а от остановки или перезагрузки настроек: скрипт не нашёл работающий процесс и сообщил об этом. Для systemd это выглядит как неудача, хотя фактически делать было нечего.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Команда остановки выполняется, когда процесса уже нет

    Программа упала сама, а затем ExecStop= попытался её остановить и не нашёл процесса. Итог: служба помечена упавшей из-за завершающей команды, а не из-за исходной проблемы.

  2. Перезагрузка настроек при остановленной службе

    systemctl reload для службы, которая не работает, вызывает ExecReload= в пустоту — скрипт возвращает 7.

  3. Служба управляется init-скриптом, который отслеживает pid-файл

    Скрипт ищет процесс по pid-файлу. Файл устарел или удалён — скрипт считает, что программа не работает, даже если процесс жив.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Показывает, на каком шаге получен код: запуск, остановка или перезагрузка настроек.

systemctl status myapp.service -l --no-pager

История событий: часто видно, что процесс завершился раньше, а код 7 пришёл уже потом.

journalctl -u myapp.service -n 40 --no-pager

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Команда остановки выполняется, когда процесса уже нет
Почему происходит
Программа упала сама, а затем ExecStop= попытался её остановить и не нашёл процесса. Итог: служба помечена упавшей из-за завершающей команды, а не из-за исходной проблемы.
Как проверить
Посмотрите, какой шаг вернул код: в статусе это строка Process с ExecStop.
systemctl status myapp.service -l --no-pager | grep -E "Process:|Active:"
Как исправить
Сделайте команду остановки терпимой к отсутствию процесса: добавьте дефис перед ней (ExecStop=-/usr/bin/myapp stop) или используйте SuccessExitStatus=7, чтобы такой код считался успехом.
SuccessExitStatus=7
2. Перезагрузка настроек при остановленной службе
Почему происходит
systemctl reload для службы, которая не работает, вызывает ExecReload= в пустоту — скрипт возвращает 7.
Как проверить
Проверьте состояние службы перед перезагрузкой настроек.
systemctl is-active myapp.service
Как исправить
Используйте systemctl reload-or-restart вместо reload: остановленная служба будет просто запущена.
3. Служба управляется init-скриптом, который отслеживает pid-файл
Почему происходит
Скрипт ищет процесс по pid-файлу. Файл устарел или удалён — скрипт считает, что программа не работает, даже если процесс жив.
Как проверить
Сравните pid-файл с фактическими процессами.
cat /run/myapp.pid 2>/dev/null; ps -ef | grep -v grep | grep myapp
Как исправить
Уберите устаревший pid-файл и переведите службу на родной unit-файл без обёртки: systemd следит за процессами сам, без pid-файлов.

Пример вывода

Команда остановки не нашла процесс. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

× myapp.service - My application
     Active: failed (Result: exit-code) since Mon 2026-09-15 12:22:41 MSK; 3s ago
    Process: 10100 ExecStop=/usr/sbin/myapp-wrapper stop (code=exited, status=7/NOTRUNNING)

myapp-wrapper[10100]: myapp is not running
systemd[1]: myapp.service: Control process exited, code=exited, status=7/NOTRUNNING

Связанные ошибки

  • status=5/NOTINSTALLED и status=6/NOTCONFIGURED в systemd Коды 5 и 6 по соглашению LSB: программа не установлена или не настроена. Что это значит на практике и как проверить.
  • status=1/FAILURE в systemd Код 1/FAILURE означает, что программа запустилась и сама завершилась с ошибкой. Как найти настоящую причину в журнале службы.
  • Failed with result 'exit-code' Состояние exit-code: служба завершилась с ненулевым кодом. Что это сообщение значит и где искать настоящую причину.
  • No such process при остановке или сигнале Ошибка 3: процесса с таким номером нет. Разбор для команд остановки и подстановки номера процесса.
  • Target is busy: точка монтирования занята Не удаётся отмонтировать: target is busy. Как найти процессы, которые держат точку монтирования, и корректно освободить её.
  • signal=INT и signal=QUIT в systemd Процесс службы завершён сигналом INT или QUIT. Кто их посылает службам и почему это обычно не systemd.
  • signal=KILL (status=9/KILL) в systemd Процесс службы убит сигналом KILL. Кто мог его послать: OOM-killer, таймаут остановки systemd, администратор.
  • signal=TERM (status=15/TERM) в systemd Процесс службы завершён сигналом TERM. Когда это нормальная остановка, а когда признак проблемы.

Источники

  • systemd.exec(5)
    Класс LSB: код 7 — программа не запущена.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • systemd.service(5)
    SuccessExitStatus= и префикс «-» у команд Exec*=.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено на unit с ExecStop, вызванным после падения процесса.
    собственная проверка, systemd 255
    сверено 15 сентября 2026