2013-10-25 1 views
0

나는 지난 몇 년간 꾸준히 운영되어 왔던 몇 가지 펄 스크립트 파일을 가지고 있습니다. 갑자기, 지난 며칠 동안, down, up, down, ..... 때때로 구문 오류가 발생하기도합니다. 때로는 정상적으로 작동하기 때문에 오랫동안 거기에 있었기 때문에 최근에는 변경하지 않았습니다. 게다가 Lunix 쉘 명령에서 아무런 문제없이 실행할 수 있습니다. 파일 권한은 755이므로 모든 것이 올바르게 설정되어있는 것으로 보입니다. 그들은 웹 호스팅 회사에 의해 호스팅되며 서버 로그 파일에 액세스 할 수 없습니다.펄 스크립트는 브라우저에서 열 수 없으며 리눅스 쉘 명령어로도 괜찮습니다.

오류 메시지입니다 전형적인 펄 오류 메시지 :

는 "내부 서버 오류가 서버에 내부 오류 또는 잘못된 발생하여 요청을 완료 할 수 없습니다 서버 관리자에게 문의하고 그들을 알려 주시기 바랍니다. 시간은 오류가 발생하고, 행동은이 오류 전에 방금 수행.이 오류에 대한 더 많은 정보가 서버 오류 로그에 사용할 수 있습니다. "

+1

누군가가 서버 설정 (httpd.conf)을 변경 한 것 같습니다. 테스트 환경에서 작동합니까? – michael501

+0

"오류 메시지는 일반적인 Perl 오류 메시지입니다."- 실제로 Perl 오류 메시지가 아닙니다. 이 오류는 웹 서버에서 생성됩니다. –

답변

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}++; } 
+0

지금은 괜찮습니다. 다음 번에 다시 작동하면 "CGI :: Carp qw (fatalsToBrowser)"가 추가됩니다. 내 perl 코드에 무엇이 잘못되었는지 확인하는 데 감사합니다 – james

+0

내 대답에 추가되었습니다. – ikegami

+0

코드가 실제로 로그 파일에 기록한 경우 도움이 될 수 있습니다! 결정된. – ikegami

0

사이트가 최근 호스팅 회사가 다른 서버에 전송 된 또는 서버 설정이 최근에 변경 한 경우 UNIX으로 '다른 이름으로 저장 추가'>> '다른 이름으로 저장을 사용하여 HTML 키트 파일을 저장하려고 형식 '을 선택한 다음 업로드하십시오.