status=126 в systemd: файл не исполняется
Код 126 — тоже соглашение оболочки: файл найден, но запустить его не удалось. Обычно нет права на исполнение, либо это каталог, либо файловая система смонтирована с запретом исполнения.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
У файла нет права на исполнение
Скрипт скопировали, распаковали или создали редактором без бита x. Оболочка находит файл, но выполнить его не может.
-
Файловая система смонтирована с запретом исполнения
Раздел с параметром noexec не позволяет запускать программы независимо от прав. Часто так монтируют /tmp, /var/tmp и разделы с данными.
-
По пути оказался каталог, а не файл
Опечатка или неполный путь: оболочка сообщает о невозможности выполнить каталог тем же кодом.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Оболочка пишет причину словами: «Permission denied» или «Is a directory».
journalctl -u myapp.service -n 30 --no-pagerПараметры монтирования: наличие noexec объясняет отказ при верных правах.
findmnt -T /usr/local/bin -o TARGET,OPTIONSРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Скрипт скопировали, распаковали или создали редактором без бита x. Оболочка находит файл, но выполнить его не может.
- Как проверить
-
Посмотрите права.
ls -l /usr/local/bin/backup.sh
- Как исправить
-
Добавьте право на исполнение владельцу и тем, от чьего имени работает служба; для скриптов достаточно 0755.
sudo chmod +x /usr/local/bin/backup.sh
- Почему происходит
- Раздел с параметром noexec не позволяет запускать программы независимо от прав. Часто так монтируют /tmp, /var/tmp и разделы с данными.
- Как проверить
-
Посмотрите параметры монтирования для нужного пути.
findmnt -T /opt/myapp -o TARGET,OPTIONS
- Как исправить
- Перенесите программу на раздел без запрета исполнения или уберите параметр noexec, если это допустимо по вашим правилам безопасности.
- Почему происходит
- Опечатка или неполный путь: оболочка сообщает о невозможности выполнить каталог тем же кодом.
- Как проверить
-
Посмотрите тип объекта.
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 world-inaccessible Предупреждение о правах на unit-файл: служба работает, но файл недоступен для чтения другим.
Источники
-
systemd.exec(5)
Коды 126 и 127 назначает оболочка, а не systemd. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено на скрипте без бита x и на разделе с noexec.