apache worker + php fastcgi,长脚本

apache worker + php fastcgi,长脚本

我的问题是较长的 php 脚本(几个小时)过早退出。(FireFox 说“页面加载时与服务器的连接已重置”)。

它们有时会在 30 分钟后退出,有时会在 1 小时 45 分钟后退出。

  • CentOS 6.6 64位
  • Apache 2.2.9 MPM 工作器
  • php 5.5.20 mod_fcgid 2.3.9
  • 未安装操作码缓存
  • cPanel 和 WHM 11.46
  • 我有 root 权限

对于 FastCGI,我通过 WHM 包含编辑器将以下内容包含到 httpd.conf 中,并包含到 post_virtualhost:

<IfModule mod_fcgid.c>
FcgidBusyTimeout 86400
FcgidIOTimeout 86400
</IfModule>

在 IfModule 部分之后,我有 < Directory path/to/mysite> 部分('<' 之后没有空格)。

我在脚本中多次使用 set_time_limit() 和 ignore_user_abort() 来使其保持运行。

apache 错误日志中没有任何内容。

php信息:http://lot-art.com/info.php(您可以看到 set_time_limit() 和 ignore_user_abort() 起作用了)

它在运行 mod_php 的旧服务器上运行良好:http://216.119.148.91/info.php

答案1

只需通过 cron /等运行独立于 Web 服务器的脚本即可。

如果您需要从 Web 服务器运行它...popen(nohup ..)并在客户端上运行该脚本...

我的猜测是网络服务器/浏览器连接超时/失败,最终 TCP 堆栈说“我们在这里完成了”并且 php 进程被拆除...我不愿想象浏览器窗口要等待几个小时才能完成脚本......

如果您真的想这样做..并且问题确实是客户端连接问题,您可以考虑在脚本/php.ini 中将 ignore-user-abort 设置为 true...

http://php.net/manual/en/function.ignore-user-abort.php

答案2

这是否可能是由于 PHP 5.5 中的错误造成的?诸如分段错误之类的问题会导致 php 立即退出 - 据我所知不会记录任何错误。

我同意你应该从命令行运行它,如果它是一个段错误或类似错误,那么尝试运行它 gdb 来获取核心转储并在此处将其报告为错误: https://bugs.php.net/

如果这不是一个选项,我会尝试向任务添加日志记录以缩小脚本退出的时间点。

相关内容