Apache2 阿帕奇(2)抛出;没有这样的文件或目录:exec of'/usr/lib/cgi-bin/fst.cgi';“失败”;
我在Ubuntu10.10(MaverickMeerkat)中工作,并在下运行我的脚本,但它向我显示了以下错误 [Sat错误没有这样的文件或目录:'/usr/lib/cgi-bin/fst.cgi'的exec失败 [Sat Oct 22 02:56:45 2011][error][client 127.0.0.1]脚本头过早结束:fst.cgi 我的剧本是Apache2 阿帕奇(2)抛出;没有这样的文件或目录:exec of'/usr/lib/cgi-bin/fst.cgi';“失败”;,apache2,cgi,Apache2,Cgi,我在Ubuntu10.10(MaverickMeerkat)中工作,并在下运行我的脚本,但它向我显示了以下错误 [Sat错误没有这样的文件或目录:'/usr/lib/cgi-bin/fst.cgi'的exec失败 [Sat Oct 22 02:56:45 2011][error][client 127.0.0.1]脚本头过早结束:fst.cgi 我的剧本是 #!/usr/bin/perl print "Content-type:text/html\n\n"; print "hello world
#!/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
ScriptAlias/cgi-bin//usr/lib/cgi-bin/
选项+执行CGI
AddHandler cgi script.cgi.pl
但它仍然显示出同样的错误。我已经做了所有可能的更改,但没有取得任何成功…- 确保脚本在apache用户下执行正常:
#su-c/usr/lib/cgi-bin/fst.cgi-apache
- 确保目录
具有755权限/usr/lib/cgi-bin
- 确保脚本
具有755权限/usr/lib/cgi-bin/fst.cgi
相同的Perl脚本无需任何修改即可正常工作。我多次遇到相同的问题-尝试将文件中的shebang修改为:
#!/usr/bin/perl -w
现在,为什么这会让脚本执行,这让我很吃惊……如果您发现了,请让我们也知道。错误消息“没有这样的文件或目录”既不是来自Apache,也不是来自Perl。当Apache调用脚本时,它会将执行传递给命令行解释器(CLI)此CLI打开脚本文件并读取第一行“#!/usr/bin/perl”(shebang行)
正如Sam Tseng所阐述的,该文件显然包含Windows换行符序列:“\r\n”(hexcode: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”选项时不会导致错误。您需要删除“Windows”回车符它是在Windows环境中创建文件时生成的
这可以通过命令轻松完成
dos2unix fst.cgi fst.cgi
chmod 755 fst.cgi
第一个fst.cgi是要转换的文件,第二个是目标文件名,可以保持不变
下一步是运行命令
dos2unix fst.cgi fst.cgi
chmod 755 fst.cgi
这将覆盖该文件的权限,并允许您执行该文件
祝你好运,我遇到了一个类似的错误:(2)没有这样的文件或目录:“/var/www/cgi-bin/aaa.py”的exec失败。上面这样的答案无法解决。然后我发现:vim-aaa.py
:set-ff,文件格式是dos。:set-ff=unix
和wq很快就解决了它。同样的问题花费了我几乎一整天的时间!我想提供一种可能性
我的电脑和远程服务器操作系统都是Ubuntu 16.04。我使用它将文件从电脑传输到远程服务器。默认传输类型设置为自动,这就是我的原因
解决方案是将默认传输类型设置为二进制,导航路径为:
编辑->首选项->设置->传输->文件类型->默认传输类型:您确定您的脚本不应该以#!/usr/bin/perl
开头吗?我的脚本不应该以#!usr/bin/perl开头。我想,问题出在脚本头:try#!/usr/bin/perl
。我也尝试过这个…但它显示了相同的错误…升级php后我也发生了类似的情况-当我删除旧php时,它不知何故也删除了php cgi,所以我只是重新安装了它sudo apt install php cgi
这里有一个perl脚本,用于在Windows和Mac之间转换文本文件,而不使用FTP:。要知道如何使用,只需键入:“perl-sdos2mac.pl”+1谢谢你,我被这件事抓住了。我用dos2unix
在我的ubuntu机器上更正了行尾。今天这帮我节省了12次。真是太奇怪了,但它仍然有效!只是..呃..告诉我为什么我要改用PHP:我也为自己工作过,但见Sam Tseng的答案。真正的原因是我的脚本在Linux上使用了DOS行尾“-w”似乎使PERL在行尾方面更加出色。它在--help
中说:-w启用了许多有用的警告
。写下来,你就会看到发生了什么:“!!/usr/bin/PERL-w\r”windows换行序列的“\r”字符“\r\n”从路径中删除“/usr/bin/PERL”并成为参数“-w\r”的一部分。现在系统可以找到perl可执行文件并将“-w\r”作为参数传递。