failed to open log file

Apacheのエラーログに残された、一見具体的なようで抽象的な3行のエラーメッセージ。

[Mon Mer 3 20:04:54 2008] [error] [client xx.xx.xx.xx] failed to open log file
[Mon Mer 3 20:04:54 2008] [error] [client xx.xx.xx.xx] fopen: Permission denied
[Mon Mer 3 20:04:54 2008] [error] [client xx.xx.xx.xx] Premature end of script headers: xxx.cgi

ソースからログファイルを開いてそうな箇所を追い掛けてみるも存在せず、shellから実行すると問題なく動作して頭を抱える。そういえば以前にも同じエラーがあったことをこの辺で思い出し、ググってみるとすぐに見つかった。

CGIを実行して以下のエラーがapacheのログに出力されたら、改行コードが不正な可能性があります。

CGIの改行コード - うなの日記

これは、改行コードの誤りによりshebang lineが誤認されるのが原因。つまり、改行コードがCR+LFになっている場合に、

#!/usr/bin/perl[CR][LF]

どうやら上記は「perl[CR]」というコマンドを実行しようとしてエラーになるらしい。よって、改行コードをLFに修正することで直る。ありがちなミスではあるが、エラーメッセージから原因が推測しづらいのでよくハマる‥‥