Failed with result 'exit-code'
Строка Failed with result 'exit-code' — это итог, а не причина. Она значит, что процесс службы завершился с числом, отличным от нуля, и systemd признал запуск неудачным. Настоящая причина — в самом числе и в сообщениях программы выше.
Что это значит
Разбор всегда идёт снизу вверх: сначала находим строку с status=N, затем читаем, что писала служба перед ней. Число до 200 назначила программа, 200 и выше — systemd, не сумев подготовить запуск.
Само состояние exit-code ни на что не указывает, кроме факта. Его полезно знать, чтобы отличать от signal, timeout и oom-kill: там процесс не сам решил завершиться.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Программа вышла с кодом, который назначила сама (числа до 200)
Ошибка в настройках, занятый порт, недоступная база, необработанное исключение. Код только помечает неудачу, смысл ему придаёт программа.
-
systemd не сумел подготовить запуск (числа 200 и выше)
Коды от 200 назначает сам systemd: он не смог перейти в каталог, сменить пользователя, применить ограничение или запустить файл. Программа при этом не выполнялась.
-
Код вернула предварительная или завершающая команда
Неудача
ExecStartPre=не даёт службе запуститься вовсе, а неудачаExecStop=помечает упавшей уже остановленную службу. В обоих случаях главный процесс мог быть в полном порядке.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Даёт и состояние результата, и число, и шаг — всё, что нужно для первого шага разбора.
systemctl status myapp.service -l --no-pagerСообщения самой службы: при кодах до 200 причина именно там.
journalctl -u myapp.service -n 60 --no-pagerПоказывает имя и класс последнего кода выхода службы, не заставляя искать его в таблице.
systemd-analyze exit-status $(systemctl show myapp.service -p ExecMainStatus --value)Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Ошибка в настройках, занятый порт, недоступная база, необработанное исключение. Код только помечает неудачу, смысл ему придаёт программа.
- Как проверить
-
Найдите число и прочитайте сообщения службы перед ним.
systemctl status myapp.service -l --no-pager | grep -E "status=|Process:" journalctl -u myapp.service -n 60 --no-pager
- Как исправить
- Исправляйте то, о чём сообщила программа. Разбор частых чисел: 1 — общая неудача, 2 — недопустимые аргументы, 78 — ошибка настройки.
- Почему происходит
- Коды от 200 назначает сам systemd: он не смог перейти в каталог, сменить пользователя, применить ограничение или запустить файл. Программа при этом не выполнялась.
- Как проверить
-
Посмотрите имя шага рядом с кодом — оно и есть диагноз.
journalctl -xeu myapp.service --no-pager -n 30 | grep -i "failed at step"
- Как исправить
- Правьте тот параметр unit-файла, который назван шагом: EXEC — команда запуска, CHDIR — рабочий каталог, USER — пользователь.
- Почему происходит
- Неудача
ExecStartPre=не даёт службе запуститься вовсе, а неудачаExecStop=помечает упавшей уже остановленную службу. В обоих случаях главный процесс мог быть в полном порядке.
- Как проверить
-
Посмотрите, какая строка Process содержит ненулевой код.
systemctl status myapp.service -l --no-pager | grep "Process:"
- Как исправить
-
Разбирайтесь именно с той командой. Если неудача завершающей команды не важна, поставьте перед ней дефис:
ExecStop=-/usr/bin/myapp stop.
Пример вывода
Служба завершилась с кодом 1, состояние результата — exit-code. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
× myapp.service - My application
Active: failed (Result: exit-code) since Mon 2026-09-15 19:02:11 MSK; 4s ago
Main PID: 19400 (code=exited, status=1/FAILURE)
myapp[19400]: fatal: cannot connect to database at 127.0.0.1:5432
systemd[1]: myapp.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: myapp.service: Failed with result 'exit-code'.
Связанные ошибки
- status=1/FAILURE в systemd Код 1/FAILURE означает, что программа запустилась и сама завершилась с ошибкой. Как найти настоящую причину в журнале службы.
- status=203/EXEC в systemd Код 203/EXEC означает, что systemd не смог выполнить программу из ExecStart=. Разбор причин: путь, права, интерпретатор, синтаксис оболочки.
- Failed with result 'signal' Состояние signal: процесс службы завершён сигналом без сохранения дампа. Как узнать, каким сигналом и от кого.
- Failed with result 'timeout' Состояние timeout: служба не уложилась в отведённое время при запуске, остановке или перезагрузке настроек.
- Failed with result 'oom-kill' Состояние oom-kill: процесс службы убит из-за нехватки памяти. Как понять, упёрлись в предел службы или в память машины.
- start-limit-hit: служба заблокирована после серии перезапусков Состояние start-limit-hit и сообщение start request repeated too quickly: systemd перестал перезапускать службу. Как разблокировать и найти исходную причину.
- Служба active, но не работает: обёртки и oneshot Почему состояние active не означает работающую программу: oneshot с RemainAfterExit, обёртки, потерянный главный процесс.
- A start job is running: загрузка висит на одной службе Загрузка останавливается с обратным отсчётом: служба не укладывается в таймаут. Как найти виновника и не ждать.
Где встречается чаще всего
Источники
-
systemd.service(5)
Таблица значений Result: exit-code означает ненулевой код завершения. - service.c: перечень значений service_result_table
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Сверено с выводом systemctl show -p Result на тестовых unit-файлах.