Apache 2.2 CGI 超时配置

Apache 2.2 CGI 超时配置

我有一个默认的 Apache 2.2 系统设置,其中的 Perl CGI 脚本目录配置如下:

ScriptAlias /jarvis/ "/opt/jarvis/cgi-bin/"

这里没什么特别的,除了我的一个脚本需要 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 分钟而不会被终止?

编辑

定期写出日志消息可以避免此错误 - 因此每隔几分钟写一次日志消息可确保长时间运行的进程不会被终止。我最终通过在客户端上实现进度条并让我的脚本每隔一段时间写一个“。”来更新另一端的进度条来解决了我的问题。

谢谢,杰米

答案1

暂停指令定义了 Apache 在各种情况下等待 I/O 的时间长度:

  1. 从客户端读取数据时,如果读取缓冲区为空,则等待 TCP 数据包到达的时间长度。
  2. 当向客户端写入数据时,如果发送缓冲区已满,则等待数据包确认的时间长度。
  3. 在 mod_cgi 中,等待 CGI 脚本输出的时间长度。
  4. 在 mod_ext_filter 中,等待过滤过程输出的时间长度。
  5. 在 mod_proxy 中,如果没有配置 ProxyTimeout,则默认超时值。

答案2

如图所示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

空闲超时设置 apache 等待 cgi 返回某个内容的时间(以秒为单位)。

答案3

此错误来自数据库,该数据库的查询在其后面运行,要么是它的索引没有正确完成,要么是查询很慢,请检查错误是否不会再发生

相关内容