Perl CGIスクリプトディレクトリが次のように構成されたデフォルトのApache 2.2システムセットアップがあります。
ScriptAlias /jarvis/ "/opt/jarvis/cgi-bin/"
私のスクリプトの1つが処理するのに10分以上かかることを除いて、ここでは特別なことは何もありません。さまざまな理由により、この間何も出力しません。
ApacheのCGIスクリプトの実行時間は10分(600秒)のようです。この時間内にスクリプトからの出力がない場合、スクリプトは強制終了され、500応答がブラウザー/クライアントに送信されます。
メッセージ:
[Thu Apr 23 13:57:53 2009] [warn] [client 127.0.0.1] Timeout waiting for output from CGI script /opt/jarvis/cgi-bin/jarvis.pl
あるシステム(Ubuntu、apt-get経由でインストール)のログには表示されますが、別のシステム(Windows、パッケージダウンロード経由でインストール)には表示されません。
私の質問は、Apache 2.2で、スクリプトを終了せずに10分を超えるスクリプトを実行できるようにする構成はありますか?
編集
ログメッセージを定期的に書き込むことで、このエラーを回避できます。したがって、数分おきにログメッセージを書き込むと、長時間実行されているプロセスが強制終了されることはありません。クライアントに進行状況バーを実装し、スクリプトに "。"と書いてもらうことで、最終的に問題を解決しました。たまに相手側のバーを更新します。
ありがとう、ジェイミー
TimeOutディレクティブは、Apacheがさまざまな状況でI/Oを待機する時間の長さを定義します。
http://cweiske.de/tagebuch/Running%20Apache%20with%20a%20dozen%20PHP%20versions.htm に示すように:
FastCgiServer /var/www/cgi-bin/php-cgi-5.3.1 -idle-timeout 120
アイドルタイムアウトは、CGIが何かを返すのをApacheが待機する時間を秒単位で設定します