Apache 2.2 CGI 超时配置

4 timeout cgi apache-2.2

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

ScriptAlias /jarvis/ "/opt/jarvis/cgi-bin/"
Run Code Online (Sandbox Code Playgroud)

除了我的一个脚本需要 10 多分钟来处理之外,这里没有什么特别的,并且由于各种原因,在此期间没有打印任何内容。

Apache 似乎有 10 分钟(600 秒)的时间范围来运行 CGI 脚本 - 如果在此时间范围内脚本没有出现任何输出,则脚本将被终止,并向浏览器/客户端发送 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
Run Code Online (Sandbox Code Playgroud)

出现在一个系统(Ubuntu,通过 apt-get 安装)的日志中,但不会出现在另一个系统(Windows,通过包下载安装)上。

我的问题是 - Apache 2.2 中是否有任何配置可以让我运行脚本超过 10 分钟而不会被杀死?

编辑

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

谢谢,杰米

小智 6

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

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