SystemdDoctor
служба не работает скрипты права оболочка

status=126 в systemd: файл не исполняется

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

Проверено на тестовой машине: systemd 255, Ubuntu 24.04. Сверено с документацией 15 сентября 2026. Как мы проверяем

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

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

  1. У файла нет права на исполнение

    Скрипт скопировали, распаковали или создали редактором без бита x. Оболочка находит файл, но выполнить его не может.

  2. Файловая система смонтирована с запретом исполнения

    Раздел с параметром noexec не позволяет запускать программы независимо от прав. Часто так монтируют /tmp, /var/tmp и разделы с данными.

  3. По пути оказался каталог, а не файл

    Опечатка или неполный путь: оболочка сообщает о невозможности выполнить каталог тем же кодом.

Диагностика

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

Оболочка пишет причину словами: «Permission denied» или «Is a directory».

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

Параметры монтирования: наличие noexec объясняет отказ при верных правах.

findmnt -T /usr/local/bin -o TARGET,OPTIONS

Решение

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

1. У файла нет права на исполнение
Почему происходит
Скрипт скопировали, распаковали или создали редактором без бита x. Оболочка находит файл, но выполнить его не может.
Как проверить
Посмотрите права.
ls -l /usr/local/bin/backup.sh
Как исправить
Добавьте право на исполнение владельцу и тем, от чьего имени работает служба; для скриптов достаточно 0755.
sudo chmod +x /usr/local/bin/backup.sh
2. Файловая система смонтирована с запретом исполнения
Почему происходит
Раздел с параметром noexec не позволяет запускать программы независимо от прав. Часто так монтируют /tmp, /var/tmp и разделы с данными.
Как проверить
Посмотрите параметры монтирования для нужного пути.
findmnt -T /opt/myapp -o TARGET,OPTIONS
Как исправить
Перенесите программу на раздел без запрета исполнения или уберите параметр noexec, если это допустимо по вашим правилам безопасности.
3. По пути оказался каталог, а не файл
Почему происходит
Опечатка или неполный путь: оболочка сообщает о невозможности выполнить каталог тем же кодом.
Как проверить
Посмотрите тип объекта.
ls -ld /usr/local/bin/backup.sh
Как исправить
Исправьте путь до файла программы.

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

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

× backup.service - Nightly backup
     Active: failed (Result: exit-code) since Mon 2026-09-15 02:00:04 MSK; 2s ago
    Process: 11500 ExecStart=/bin/sh -c /usr/local/bin/backup.sh (code=exited, status=126)

sh[11500]: /usr/local/bin/backup.sh: Permission denied
systemd[1]: backup.service: Main process exited, code=exited, status=126

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

  • status=127 в systemd: команда не найдена Код 127 без имени: оболочка не нашла команду. Появляется, когда ExecStart запускает скрипт или sh -c, а внутри команды нет.
  • status=203/EXEC в systemd Код 203/EXEC означает, что systemd не смог выполнить программу из ExecStart=. Разбор причин: путь, права, интерпретатор, синтаксис оболочки.
  • Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
  • sudo: user is not in the sudoers file Скрипт службы не может выполнить команду через sudo: нет правила, требуется терминал или пароль.
  • AppArmor: apparmor="DENIED" в журнале ядра Профиль AppArmor запретил операцию: как прочитать запись, найти профиль и поправить его правильно.
  • Argument list too long в службе или скрипте Список аргументов слишком длинный: подстановка имён файлов дала тысячи аргументов. Как переписать вызов.
  • Caddy не занимает порты 80 и 443 без прав Служба падает при открытии слушателя: нет возможности занимать привилегированные порты.
  • Configuration file is marked executable Предупреждение о правах: unit-файл помечен исполняемым. Откуда берётся и почему это стоит исправить.

Источники

  • systemd.exec(5)
    Коды 126 и 127 назначает оболочка, а не systemd.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено на скрипте без бита x и на разделе с noexec.
    собственная проверка, systemd 255
    сверено 15 сентября 2026