0

我有几个 perl 脚本文件,过去几年一直在运行,突然之间,在过去的几天里,它们是 up,down,up,down,..... 它们没有语法错误,因为有时它们会启动,并且它们已经存在了很长时间,所以我最近没有更改它们。另外,我可以毫无问题地从 Lunix shell 命令运行它们,文件权限是 755,所以一切似乎都设置正确。它们由网络托管公司托管,我无权访问服务器日志文件。

错误信息是典型的 perl 错误信息:

" Internal Server Error 服务器遇到内部错误或配置错误,无法完成您的请求。请联系服务器管理员并告知他们错误发生的时间,以及您在此错误之前执行的操作。有关此错误的更多信息可能在服务器错误日志中可用。

4

2 回答 2

4

在您的程序中尽早添加use CGI::Carp qw( fatalsToBrowser );以将错误返回到浏览器。

或者,您可以使用 CGI::Carp 使用的相同技术或脚本包装器将错误保存在您自己的日志文件中。

将以下内容添加到脚本的开头,以使其将错误和警告记录到您选择的日志文件中。

sub self_wrap {
   my $log_qfn = "$ENV{HOME}/.web.log";  # Adjust as needed.
   open(my $log_fh, '>>', $log_qfn)
      or warn("Can't append to log file \"$qfn\": $!"), return;

   require IPC::Open3;
   require POSIX;

   my $prefix = sprintf("[%s] [client %s] ",
      POSIX::strptime('', localtime),
      $ENV{REMOTE_ADDR} || '???'
   );

   my $suffix = $ENV{HTTP_REFERER} ? ", $ENV{HTTP_REFERER}" : '';

   my $pid = IPC::Open3::open3(
      '<&STDIN',
      '>&STDOUT',
      local *CHILD_STDERR,
      $^X, $0, @ARGV
   );

   while (<CHILD_STDERR>) {
      print(STDERR $_);
      chomp;
      print($log_fh $prefix, $_, $suffix, "\n");
   }

   waitpid($pid, 0);
   POSIX::_exit(($? & 0x7F) ? ($? & 0x7F) | 0x80 : $? >> 8);
}

BEGIN { self_wrap() if !$ENV{WRAPPED}++; }
于 2013-10-25T16:37:52.473 回答
0

如果您的网站最近被托管公司转移到不同的服务器上,或者服务器设置最近被更改,请尝试使用“另存为”>>“另存为 UNIX 格式”以 HTML 工具包保存文件,然后上传。

于 2013-10-28T11:40:15.117 回答