Apache (2) выдает «Нет такого файла или каталога: не удалось выполнить exec из /usr/lib/cgi-bin/fst.cgi» - PullRequest
14 голосов
/ 22 октября 2011

Я работаю в Ubuntu 10.10 (Maverick Meerkat) и запускаю свой CGI скрипт под Apache , но он показывает следующую ошибку ...

[сб. ОшибкаНет такого файла или каталога: exec из '/usr/lib/cgi-bin/fst.cgi' завершился неудачей [сб. 22 октября 02:56:45 2011] [ошибка] [клиент 127.0.0.1] Преждевременное завершениезаголовков сценариев: fst.cgi

Мой сценарий

#!/usr/bin/perl
print "Content-type:text/html\n\n";
print "hello world";

Я установил права доступа к файлу ...

Я также добавилследующая строка в файле apache.conf:

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

<Directory /usr/lib/cgi-bin/>
   Options +ExecCGI
</Directory>

AddHandler cgi-script .cgi .pl

Но все равно он показывает ту же ошибку.Я сделал все возможные изменения, но не добился успеха ...

Ответы [ 7 ]

31 голосов
/ 25 декабря 2011

Я обнаружил ту же ошибку, найденную в моем / var / log / apache2 / error_log.Я наконец понял, что скрипт Perl был напрямую скопирован из моей системы Windows (через виртуальную машину Parallels), и кажется, что возврат каретки Windows "\ r \ n" вызывает эту ошибку.

Когда я передаю этот Perl по FTPсценарий из Windows в Mac с использованием режима ASCII для автоматического преобразования «\ r \ n» в «\ r», тот же сценарий Perl работает правильно без каких-либо изменений.

11 голосов
/ 26 апреля 2012

Я сталкивался с одной и той же проблемой несколько раз - попробуйте изменить ваш shebang в файле:

#!/usr/bin/perl -w

Теперь, почему это заставляет скрипт выполняться, обгоняет меня ... если вы узнаете, пожалуйста, сообщите нам об этом.

10 голосов
/ 29 марта 2014

Сообщение об ошибке «Нет такого файла или каталога» не приходит ни от Apache, ни от Perl. Когда Apache вызывает сценарий, он передает выполнение интерпретатору командной строки (CLI) системы. Этот CLI открывает файл сценария и читает первую строку «#! / Usr / bin / perl» (строка shebang).

Как уточнил Сэм Ценг, файл, очевидно, содержит последовательность символов разрыва строки Windows: " \ r \ n" (шестнадцатеричный код: x0D x0A, символы: CR LF). Теперь интерпретатор CLI читает строку до символа "\ n". CLI не распознает символ "\ r", поэтому он становится частью пути "/ usr / bin / perl \ r " и больше не является частью переноса строки.

Почему опция '-w' решает эту проблему?

Когда вы добавляете параметр '-w', символ '\ r' становится частью аргумента "-w \ r". Путь к исполняемому файлу Perl теперь можно найти "/ usr / bin / perl", а "-w \ r" передается в качестве аргумента командной строки. Тем не менее, Perl хорош и не вызывает ошибок при обработке опции "-w \ r".

2 голосов
/ 11 августа 2016

Я обнаружил аналогичную ошибку: (2) Нет такого файла или каталога: не удалось выполнить exec из /var/www/cgi-bin/aaa.py. И ответы, подобные выше, не могут быть разрешены. Затем я нахожу, что: vim aaa.py :set ff и формат файла - dos. :set ff=unix и WQ скоро исправил это.

1 голос
/ 11 августа 2016

Вам необходимо удалить «возврат каретки Windows», который создается при создании файлов в среде Windows.

это легко сделать командой

dos2unix fst.cgi fst.cgi

Первый файл fst.cgi - это файл, который вы хотите преобразовать, а второй - имя файла назначения, который может остаться неизменным.

Следующий шаг - запустить команду

 chmod 755 fst.cgi

Это переопределит разрешение файла и позволит вам выполнить файл.

Удачи

0 голосов
/ 13 февраля 2019

Та же проблема стоит мне почти целый день! Я хотел бы предоставить возможность.

На моем ПК и на удаленном сервере установлена ​​ОС Ubuntu 16.04 . И я использую FileZilla для передачи файлов с ПК на удаленный сервер. тип передачи по умолчанию установлен как Авто , что является причиной в моем случае.

Решение состоит в том, чтобы установить тип передачи по умолчанию как Binary . И путь навигации: Редактировать -> Предпочтения -> Настройки -> Переводы -> Типы файлов -> По умолчанию тип перевода:

0 голосов
/ 27 октября 2011
  • Убедитесь, что ваш скрипт выполняется нормально под пользователем apache: # su -c /usr/lib/cgi-bin/fst.cgi apache
  • Убедитесь, что каталог /usr/lib/cgi-bin имеет разрешение 755
  • Убедитесь, что у сценария /usr/lib/cgi-bin/fst.cgi есть разрешение 755
...