SystemdDoctor
служба не работает коды bsd настройка

Коды 64–78 в systemd: набор sysexits

Числа от 64 до 78 — это набор кодов sysexits, принятый в системах BSD и используемый многими программами на Linux. systemd их узнаёт и печатает имя, но назначает их сама программа. Собраны они в одну запись не для краткости: разбирается такой сбой всегда одинаково — по сообщению программы, а код лишь подсказывает область.

Что это значит

Полный набор, который systemd показывает по имени: 64 USAGE (ошибка в командной строке), 65 DATAERR (ошибка в данных), 66 NOINPUT (не открывается входной файл), 67 NOUSER (неизвестный адресат), 68 NOHOST (неизвестный узел), 69 UNAVAILABLE (служба недоступна), 70 SOFTWARE (внутренняя ошибка программы), 71 OSERR (ошибка системы), 72 OSFILE (нет важного системного файла), 73 CANTCREAT (не создаётся выходной файл), 74 IOERR (ошибка ввода-вывода), 75 TEMPFAIL (временная неудача, стоит повторить), 76 PROTOCOL (ошибка протокола на другой стороне), 77 NOPERM (отказ в доступе), 78 CONFIG (ошибка настройки).

Чаще прочих на серверах встречаются 78 CONFIG — ошибка в файле настроек, 75 TEMPFAIL — временная неудача у почтовых служб, и 71 OSERR. Проверить, как ваша версия systemd называет конкретное число, можно командой systemd-analyze exit-status.

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

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

  1. Ошибка в файле настроек программы (обычно код 78)

    Программа прочитала настройки, нашла недопустимое значение и завершилась с кодом настройки. Само число указывает область, а деталь — только в журнале.

  2. Временная неудача внешней зависимости (код 75)

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

  3. Не открывается входной файл или не создаётся выходной (66 и 73)

    Программе не хватает доступа к файлу либо путь не существует. Частая причина — параметры изоляции unit-файла или переполненный раздел.

Диагностика

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

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

systemd-analyze exit-status 78

Сообщение программы: код из этого набора без него не разобрать.

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

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

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

Решение

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

1. Ошибка в файле настроек программы (обычно код 78)
Почему происходит
Программа прочитала настройки, нашла недопустимое значение и завершилась с кодом настройки. Само число указывает область, а деталь — только в журнале.
Как проверить
Посмотрите сообщение программы и запустите её встроенную проверку настроек.
journalctl -u myapp.service -n 40 --no-pager
sudo myapp -t 2>&1 | head
Как исправить
Исправьте настройку по сообщению программы и перезапустите службу. Полезно держать рабочую копию файла настроек: откат быстрее разбора.
2. Временная неудача внешней зависимости (код 75)
Почему происходит
Почтовые и сетевые службы возвращают 75, когда не удалось обратиться к чему-то внешнему: недоступен узел, нет ответа от базы, закончилось место. Через минуту то же действие может пройти.
Как проверить
Проверьте доступность зависимости и повторите запуск.
systemctl show myapp.service -p Restart -p RestartSec
sudo ss -tnp | head
Как исправить
Добавьте разумный перезапуск: Restart=on-failure с RestartSec=10 вместо ручных попыток. Для служб с внешними зависимостями это уместнее, чем немедленный повтор.
3. Не открывается входной файл или не создаётся выходной (66 и 73)
Почему происходит
Программе не хватает доступа к файлу либо путь не существует. Частая причина — параметры изоляции unit-файла или переполненный раздел.
Как проверить
Посмотрите, к какому пути обращается программа, и проверьте доступ от её пользователя.
journalctl -u myapp.service -n 40 --no-pager | grep -iE "open|create|denied|space"
df -h
Как исправить
Дайте доступ к пути или добавьте его в ReadWritePaths=; при нехватке места освободите раздел.

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

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

× mailer.service - Mail relay
     Active: failed (Result: exit-code) since Mon 2026-09-15 13:10:22 MSK; 2s ago
    Process: 12100 ExecStart=/usr/local/bin/mailer --config /etc/mailer.conf (code=exited, status=78/CONFIG)

mailer[12100]: config error: unknown key "relayhost" at line 14
systemd[1]: mailer.service: Main process exited, code=exited, status=78/CONFIG

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

  • status=1/FAILURE в systemd Код 1/FAILURE означает, что программа запустилась и сама завершилась с ошибкой. Как найти настоящую причину в журнале службы.
  • status=2/INVALIDARGUMENT в systemd Код 2/INVALIDARGUMENT: программа сочла аргументы или настройки недопустимыми. Частая причина — лишние кавычки в ExecStart=.
  • Failed with result 'exit-code' Состояние exit-code: служба завершилась с ненулевым кодом. Что это сообщение значит и где искать настоящую причину.
  • status=255/EXCEPTION в systemd Код 255/EXCEPTION: программа завершилась с кодом 255 либо код используется для передачи аварийного завершения. Как различить случаи.
  • status=5/NOTINSTALLED и status=6/NOTCONFIGURED в systemd Коды 5 и 6 по соглашению LSB: программа не установлена или не настроена. Что это значит на практике и как проверить.
  • status=0/SUCCESS, но служба считается упавшей Программа завершилась успешно, а systemctl показывает inactive или failed. Разбор: Type=simple против forking, RemainAfterExit, демонизация.
  • status=126 в systemd: файл не исполняется Код 126: команда найдена, но выполнить её нельзя. Отличие от 127 и от 203/EXEC, разбор причин.
  • status=127 в systemd: команда не найдена Код 127 без имени: оболочка не нашла команду. Появляется, когда ExecStart запускает скрипт или sh -c, а внутри команды нет.

Источники

  • systemd.exec(5)
    Таблица кодов BSD: полный набор sysexits с описаниями.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Сверено с выводом systemd-analyze exit-status на systemd 255: имена и классы совпадают с таблицей.
    собственная проверка, systemd 255
    сверено 15 сентября 2026