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

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

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Apache Error: AH01215: CGI execution failed: script not found or unable to execute Linux / DevOps

Apache Error AH01215: CGI execution failed — Решение

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

При вызове CGI-скрипта (Perl, Python, Bash, C/C++) веб-сервер возвращает пользователю ошибку 500 Internal Server Error. В системном журнале error.log фиксируется сбой исполнения процесса: [cgi:error] [pid 1234:tid 5678] [client ...] AH01215: /usr/lib/cgi-bin/test.cgi: CGI execution failed: script not found or unable to execute или AH01215: (13)Permission denied: exec of '/usr/lib/cgi-bin/script.sh' failed.

Причина отказаСимптом в файловой системеСистемный код ядра
Отсутствует флаг исполненияПрава 644 (-rw-r--r--) вместо 755(13) Permission denied
Ошибочный Shebang#!/usr/bin/python (путь не существует)(2) No such file or directory
Окончания строк Windows (CRLF)Интерпретатор ищет /bin/bash\rAH01215: script not found or unable to execute
SELinux блокировкаКонтекст не равен httpd_sys_script_exec_tSELinux запрещает ядру Apache выполнять execve()
  • Браузер отображает ошибку «500 Internal Server Error: The server encountered an internal error and was unable to complete your request».
  • CGI-процесс не может стартовать на уровне операционной системы.
  1. Установите бит исполнения (executable) на файл скрипта:
    sudo chmod +x /usr/lib/cgi-bin/script.cgi
    # Или полные права на чтение и исполнение:
    sudo chmod 755 /usr/lib/cgi-bin/script.cgi
  2. Убедитесь, что первая строка скрипта (Shebang) содержит правильный абсолютный путь к существующему в системе интерпретатору:
    #!/usr/bin/env python3
    # или для Bash:
    #!/bin/bash
    # или для Perl:
    #!/usr/bin/perl
  3. Устраните скрытые символы перевода строк Windows (CRLF), преобразовав скрипт в UNIX-формат:
    sudo dos2unix /usr/lib/cgi-bin/script.cgi
  4. Проверьте, что скрипт возвращает обязательный HTTP-заголовок Content-Type перед выводом основного тела:
    #!/bin/bash
    echo "Content-Type: text/plain"
    echo ""
    echo "Hello World"
  5. Если активен SELinux (RHEL/CentOS), назначьте файлу правильный контекст безопасности для CGI-скриптов:
    sudo chcon -t httpd_sys_script_exec_t /usr/lib/cgi-bin/script.cgi
  6. Проверьте работу скрипта, запустив его в терминале от имени пользователя веб-сервера:
    sudo -u www-data /usr/lib/cgi-bin/script.cgi
Ловушка переноса строк Windows: Если скрипт редактировался в Windows (Notepad), строка #!/bin/bash превращается в #!/bin/bash\r. Ядро Linux пытается найти бинарник с именем bash\r и возвращает No such file or directory, что приводит к загадочной на первый взгляд ошибке AH01215.
Практический опыт инженера: Если CGI-скрипт написан на Python/Perl и падает с AH01215 без вывода деталей, добавьте в начало скрипта директиву `import cgitb; cgitb.enable()` (для Python) для вывода трейса ошибок прямо в браузер.

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

Что такое модуль mod_cgid?

mod_cgid — это оптимизированная версия mod_cgi для многопоточных MPM (event/worker), использующая отдельный фоновый сокет-демон для форка процессов без замедления основных потоков веб-сервера.

Как включить поддержку CGI в произвольной папке?

Добавьте опцию ExecCGI и обработчик cgi-script: Options +ExecCGI и AddHandler cgi-script .cgi .pl .py внутри блока <Directory>.

Что означает ошибка 'Premature end of script headers'?

Она означает, что скрипт упал с критической ошибкой рантайма до того, как успел отправить обязательную строку заголовка Content-Type: text/html и пустую строку-разделитель.

Как протестировать работу CGI простым bash-скриптом?

Создайте файл test.cgi со строками: #!/bin/bash, echo 'Content-type: text/html', echo '', echo 'OK', и сделайте chmod +x.