LINUX.ORG.RU

httpd: (2)No such file or directory: exec of '...index.cgi' failed


0

0

Перенёс проект на CentOS. При запуске скрипта из cgi-bin выплёвывается вот такая ошибка в лог.

(2)No such file or directory: exec of '.../index.cgi' failed

Насколько я понимаю, это значит, что Апач не может найти файл, на который ссылается скрипт. Начало скрипта выглядит так:

#!/usr/local/bin/newlisp
...

По соотвествующему адресу newlisp лежит, запускается нормально. Если заменить адрес на несуществующий, типа #!/usr/nothing, будет та же ошибка. Если первую строчку убрать совсем, будет другая ошибка: (8)Exec format error. То есть, скрипт он всё же читает, просто не может запустить newlisp.

У меня есть версия, что у Апача не хватает полномочий на запуск newlisp. Как можно это проверить?


Ответ на: комментарий от Ritz
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>
Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Перезапустил, конечно же.

Если я правильно понимаю, сам скрипт выполняется. Не выполняется программа, которая указана в #!/...

Вторая версия у меня — возможно httpd в CentOS по умолчанию зачрутен. Но я не знаю, как это проверить.

Ritz
() автор топика
Ответ на: комментарий от Ritz

может, не хватает прав на выполнение newlisp? Попробуйте с простеньким башевым или перловым скриптом, например,

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

print "<b>Date: ", scalar localtime, "</b><br>\n";

print "<hr><h1>It worked!</h1>\n";
print "This script runs under: ".$ENV{"GATEWAY_INTERFACE"}."<hr></n";

$ENV{"SERVER_NAME"}="(Hidden for security purposes)";
$ENV{"SERVER_ADMIN"}="(Hidden for security purposes)";
$ENV{"SCRIPT_FILENAME"}="(Hidden for security purposes)";
$ENV{"SERVER_SOFTWARE"}="(Hidden for security purposes)";
$ENV{"SERVER_PORT"}="(Hidden for security purposes)";
$ENV{"SERVER_SIGNATURE"}="Apache-AdvancedExtranetServer (Complete info hidden)";
$ENV{"PATH"}="(Hidden for security purposes)";
$ENV{"SERVER_ADDR"}="(Hidden for security purposes)";
$ENV{"DOCUMENT_ROOT"}="(Hidden for security purposes)";
$ENV{"MOD_PERL"}="(Hidden for security purposes)";

print «%ENV: <br>\n», map { «$_ = $ENV{$_} <br>\n» } keys %ENV;

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Date: Wed Jul 21 20:25:07 2010 It worked! This script runs under: CGI/1.1 SCRIPT_NAME = /cgi-bin/perl.cgi SERVER_NAME = (Hidden for security purposes) SERVER_ADMIN = (Hidden for security purposes) HTTP_ACCEPT_ENCODING = gzip,deflate HTTP_CONNECTION = keep-alive REQUEST_METHOD = GET HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 SCRIPT_FILENAME = (Hidden for security purposes) SERVER_SOFTWARE = (Hidden for security purposes) HTTP_ACCEPT_CHARSET = windows-1251,utf-8;q=0.7,*;q=0.7 QUERY_STRING = REMOTE_PORT = 53222 HTTP_USER_AGENT = Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.1.9) Gecko/20100401 Ubuntu/9.10 (karmic) Firefox/3.5.9 SERVER_PORT = (Hidden for security purposes) SERVER_SIGNATURE = Apache-AdvancedExtranetServer (Complete info hidden) HTTP_ACCEPT_LANGUAGE = ru,en-us;q=0.7,en;q=0.3 REMOTE_ADDR = 83.171.93.35 HTTP_KEEP_ALIVE = 300 SERVER_PROTOCOL = HTTP/1.1 PATH = (Hidden for security purposes) REQUEST_URI = /cgi-bin/perl.cgi GATEWAY_INTERFACE = CGI/1.1 SERVER_ADDR = (Hidden for security purposes) DOCUMENT_ROOT = (Hidden for security purposes) HTTP_HOST = anophone.com MOD_PERL = (Hidden for security purposes)

Ritz
() автор топика
Ответ на: комментарий от Eddy_Em

Права вот так выглядят:

lrwxrwxrwx 1 root root 14 Jul 21 16:48 newlisp -> newlisp-10.2.8
-rwxr-xr-x 1 root root 230164 Jul 21 16:48 newlisp-10.2.8
-rwxr-xr-x 1 root root 17549 Jul 21 16:48 newlispdoc
-rwxr-xr-x 1 root root 50416 Jul 21 16:48 newlisp-edit

Если я правильно понимаю, запускать его может кто угодно.

Ritz
() автор топика
Ответ на: комментарий от Ritz

OH SHI~

Я забил в свежесозданный файлик с примером на perl свой код и всё заработало. Почему — для меня, к сожалению, загадка.

Ritz
() автор топика
Ответ на: комментарий от Eddy_Em

Решил проблему. Она была в DOS-формате скриптов: конец строки обозначался двумя символами, а не одним. Установленный vim, однако, почему-то не показывал привычного ^M, поэтому я понял это только когда начал сравнивать размеры файлов.

Команда «dos2unix index.cgi» решила проблему.

Ritz
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.