web-dev-qa-db-ja.com

Apache 2.2 CGIタイムアウト設定

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分を超えるスクリプトを実行できるようにする構成はありますか?

編集

ログメッセージを定期的に書き込むことで、このエラーを回避できます。したがって、数分おきにログメッセージを書き込むと、長時間実行されているプロセスが強制終了されることはありません。クライアントに進行状況バーを実装し、スクリプトに "。"と書いてもらうことで、最終的に問題を解決しました。たまに相手側のバーを更新します。

ありがとう、ジェイミー

4
Jamie Love

TimeOutディレクティブは、Apacheがさまざまな状況でI/Oを待機する時間の長さを定義します。

  1. クライアントからデータを読み取るときに、読み取りバッファーが空の場合にTCPパケットが到着するのを待つ時間の長さ。
  2. クライアントにデータを書き込むときに、送信バッファーがいっぱいの場合にパケットの確認応答を待機する時間の長さ。
  3. mod_cgiでは、CGIスクリプトからの出力を待機する時間の長さ。
  4. Mod_ext_filterで、フィルタリングプロセスからの出力を待機する時間の長さ。
  5. Mod_proxyで、ProxyTimeoutが構成されていない場合のデフォルトのタイムアウト値。
5
Espresso_Boy

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が待機する時間を秒単位で設定します

2
cweiske