Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
systemd Error: Failed to execute /bin/sh: Exec format error Linux / DevOps

systemd Error: Failed to execute /bin/sh: Exec format error — Решение

Обновлено: 18.08.2026  ·  Официальная база знаний

При попытке запуска сервиса через systemctl start процесс мгновенно завершается с кодом ошибки status=203/EXEC, а в журнале journalctl -u <service> появляется запись: Failed to execute /bin/sh: Exec format error или Failed at step EXEC spawning /path/to/binary: Exec format error.

Диагностический маркерЗначение ядра (errno)Технический контекст
status=203/EXECENOEXEC (код 8)Ядро не может распарсить магические байты заголовка файла
Шебанг скрипта (Shebang)Windows CRLF (^M)Интерпретатор пытается запустить несуществующий /bin/sh
Архитектура ELFx86_64 vs aarch64Попытка запуска бинарника иной процессорной архитектуры (например, в Docker multi-arch)
Блокировка монтированияФлаг noexec в fstabФайловая система запрещает выполнение любых исполняемых файлов
  • Сервис переходит в состояние failed (Result: exit-code).
  • Прямой запуск скрипта из консоли возвращает: /bin/sh: cannot execute binary file: Exec format error.
  • В контейнерных средах (Docker/Kubernetes) сбой происходит при развертывании x86 образов на ARM64 нодах (AWS Graviton, Apple Silicon).
  1. Проверьте тип файла и его архитектуру с помощью утилиты file:
    file /path/to/your/script.sh
    file /path/to/your/binary
  2. Если исполняемый файл является shell-скриптом, проверьте окончания строк на наличие скрытых символов возврата каретки \r (CRLF):
    head -n 1 /path/to/your/script.sh | cat -A
    # Если вывод заканчивается на ^M$, удалите символы Windows:
    sudo sed -i 's/\r$//' /path/to/your/script.sh
    # Либо воспользуйтесь утилитой dos2unix:
    sudo apt install -y dos2unix && sudo dos2unix /path/to/your/script.sh
  3. Убедитесь, что первая строка скрипта содержит валидный шебанг с абсолютным путем:
    #!/usr/bin/env bash
    # или
    #!/bin/sh
  4. Если файл — скомпилированный бинарник, сопоставьте архитектуру хоста и файла:
    uname -m
    # Сравните с выводом команды file (например, x86-64 против aarch64)
  5. Проверьте опции монтирования раздела, на котором расположен файл (отсутствие флага noexec):
    findmnt -T /path/to/your/script.sh
    Если раздел смонтирован с noexec, измените параметры в /etc/fstab и перемонтируйте: sudo mount -o remount,exec /path.
  6. Выполните перезагрузку демона systemd и запустите сервис:
    sudo systemctl daemon-reload
    sudo systemctl restart <service_name>
DevOps Best Practice: В CI/CD пайплайнах с Git всегда настраивайте файл .gitattributes с директивой * text eol=lf, чтобы предотвратить случайное преобразование окончаний строк в CRLF разработчиками на Windows.
Практический опыт инженера: В 90% случаев в микросервисной архитектуре эта ошибка возникает при сборке Docker-образов на Apple Silicon (M1/M2/M3) без флага `--platform linux/amd64` для последующего запуска на серверах x86_64.

Частые вопросы (FAQ)

Что означает статус 203/EXEC в systemd?

Код ошибки 203/EXEC означает, что systemd не смог выполнить системный вызов execve() для указанного процесса. Это происходит из-за отсутствия прав на исполнение, неверного шебанга или несовместимого формата бинарного файла.

Почему скрипт с #!/bin/bash падает с ошибкой Exec format error?

Если скрипт редактировался в Windows, в конце строки шебанга появляется скрытый байт \r. Ядро пытается найти интерпретатор с именем '/bin/bash\r', которого нет в системе.

Как запустить x86_64 бинарник на ARM64 сервере без перекомпиляции?

Необходимо установить эмулятор QEMU User Space и зарегистрировать бинарные форматы через binfmt_misc (например, пакет qemu-user-static).

Может ли пустой файл вызывать ошибку Exec format error?

Да, если вы передаете путь к нулевому по размеру файлу в директиву ExecStart без указания интерпретатора, ядро вернет ENOEXEC.