Apache(2)抛出“没有这样的文件或目录:'/usr/lib/cgi-bin/fst.cgi'的exec失败了”

时间:2011-10-22 10:55:43

标签: apache2 cgi

我正在使用Ubuntu 10.10(Maverick Meerkat)并在CGI下运行我的Apache脚本,但它显示以下错误...

  

[周六错误没有这样的文件或目录:'/usr/lib/cgi-bin/fst.cgi'的exec失败   [2011年10月22日星期六02:56:45] [错误] [客户端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 个答案:

答案 0 :(得分:31)

我在/ var / log / apache2 / error_log中遇到了同样的错误。 我终于意识到Perl脚本是直接从我的Windows系统复制的(通过Parallels虚拟机),似乎Windows'回车“\ r \ n”会导致此错误。

当我使用ASCII模式将此Perl脚本从Windows FTP到Mac时 自动将“\ r \ n”转换为“\ r”, 相同的Perl脚本无需任何修改即可正常工作。

答案 1 :(得分:10)

我多次遇到同样的问题 - 尝试将文件中的shebang修改为:

#!/usr/bin/perl -w

现在为什么这会使脚本执行,打败我......如果你发现了,请告诉我们。

答案 2 :(得分:10)

错误消息&#34;没有这样的文件或目录&#34;不是来自Apache也不是来自Perl。当Apache调用脚本时,它会将执行传递给系统的命令行解释器(CLI)。此CLI打开脚本文件并读取第一行&#34;#!/ usr / bin / perl&#34; (shebang line)。

Sam Tseng详细说明,该文件显然包含一个Windows换行字符序列:&#34; \ r \ n&#34; (十六进制代码:x0D x0A,符号:CR LF)。现在,CLI解释器读取该行,直到&#34; \ n&#34;字符。 CLI不会识别&#34; \ r&#34;字符,所以它成为路径的一部分&#34; / usr / bin / perl \ r &#34;并且不再是换行的一部分了。

为什么选项&#39; -w&#39;解决这个问题?

当您添加选项&#39; -w&#39;而不是角色&#39; \ r&#39; becommes参数&#34; -w \ r&#34;的一部分。现在可以找到Perl可执行文件的路径&#34; / usr / bin / perl&#34;和&#34; -w \ r&#34;作为命令行参数传递。但是,Perl非常好,并且在处理&#34; -w \ r&#34;时不会导致错误。选项。

答案 3 :(得分:2)

我遇到了类似的错误:(2)没有这样的文件或目录:'/var/www/cgi-bin/aaa.py'的exec失败了。像Above这样的答案无法解决。然后我发现:vim aaa.py :set ff并且fileformat是dos。 :set ff=unix并很快修复了它。

答案 4 :(得分:1)

您需要删除&#34; Windows&#39;回车&#34;在Windows环境中创建文件时生成的文件。

这可以通过命令

轻松完成
dos2unix fst.cgi fst.cgi

第一个fst.cgi是您要转换的文件,第二个是目标文件名,可以保持不变。

下一步是运行命令

 chmod 755 fst.cgi

这将覆盖文件的权限,并允许您执行文件。

祝你好运

答案 5 :(得分:0)

  • 确保您的脚本在apache用户下执行正常:# su -c /usr/lib/cgi-bin/fst.cgi apache
  • 确保目录/usr/lib/cgi-bin具有755权限
  • 确保脚本/usr/lib/cgi-bin/fst.cgi具有755权限

答案 6 :(得分:0)

同一问题使我几乎整天都花了!我想提供一种可能性。

我的PC和远程服务器操作系统均为 Ubuntu 16.04 。我正在使用FileZilla将文件从PC传输到远程服务器。 默认传输类型设置为自动,这就是我的原因。

解决方案是将默认传输类型设置为二进制。导航路径为: 编辑-> 首选项-> 设置-> 传输-> 文件类型- > 默认传输类型: