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

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

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

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

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

  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

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

Источники

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