我将脚本移动到一个配置几乎完全相同的新服务器(apache / centos)但是cgi-bin从那时起就一直无法工作。在过去的一周里,我搜索了所有可能的解决方案,并通过从命令行执行脚本来隔离错误。对于一个简单的测试文件,我得到的输出如下:
[root /var/foo/public_html/cgi-bin]# perl -dd /var/foo/public_html/cgi-bin/test.cgi
Loading DB routines from perl5db.pl version 1.32
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(/var/foo/public_html/cgi-bin/test.cgi:2):
2: print "Content-type: text/plain\n\n";
Unknown error
Compilation failed in require at /usr/local/share/perl5/Term/ReadLine/Perl.pm line 63.
at /usr/local/share/perl5/Term/ReadLine/Perl.pm line 63
Term::ReadLine::Perl::new('Term::ReadLine', 'perldb', 'GLOB(0x18ac160)', 'GLOB(0x182ce68)') called at /usr/share/perl5/perl5db.pl line 6073
DB::setterm called at /usr/share/perl5/perl5db.pl line 2237
DB::DB called at /var/foo/public_html/cgi-bin/test.cgi line 2
Attempt to reload Term/ReadLine/readline.pm aborted.
Compilation failed in require at /usr/local/share/perl5/Term/ReadLine/Perl.pm line 63.
END failed--call queue aborted at /var/foo/public_html/cgi-bin/test.cgi line 63.
at /var/foo/public_html/cgi-bin/test.cgi line 63
[root /var/foo/public_html/cgi-bin]#
我正在使用的测试文件的代码是:
#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
print "testing...\n";
我已经检查了perl,perl版本等的路径,一切似乎都没问题。但是,该脚本不会出现问题,并且会产生500内部服务器错误。我正在使用dso处理程序和susEXEC运行php5。除了调用cgi脚本之外,susEXEC日志没有说什么。这个问题让我很困惑,我对cgi / perl的一点经验也无济于事。谁能指出我正确的方向来解决这个问题?
答案 0 :(得分:0)
有人评论已经检查了权限,并尝试从控制台运行该文件。
一个可能的问题是,当你切换服务器时,perl的路径发生了变化而你的shebang线路出错了。避免这种情况的常用技巧是使用#!/ usr / bin / env perl代替。
当你收到500错误时,apache也应该在错误日志中记录一些内容(你的vhost配置可能会定义一个自定义错误日志而不是默认错误日志,所以如果你在查找错误消息时遇到问题,请检查。
此外,没有理由在Perl调试器下运行您的脚本,除非您的目标是试验Perl调试器(并且没有定义变量,它作为示例是没有意义的)。我的建议是不要使用Perl调试器。许多经验丰富的Perl程序员(可能是绝大多数)从不或很少使用它。
答案 1 :(得分:0)
我最终解决了这个问题,为了后人的缘故发布了它:
在移动服务器上,我将文件系统安装在不同的分区上,因为主分区内存不足。我忘了给新的挂载点赋予exec权限,这就是cgi脚本没有执行的原因。