【问题标题】:Windows Server killing long running PHP processWindows Server 杀死长时间运行的 PHP 进程
【发布时间】:2013-04-07 18:45:44
【问题描述】:

我有一个运行 IIS 和 SQL Server 2012 的 Windows 2012 服务器。

我正在尝试从命令提示符运行 PHP 脚本。该脚本需要大约 1 小时才能运行。如果我像这样直接从命令行运行它 - c:\PHP>php.exe "D:\Web\phpScript.php" 它运行良好。再次运行大约需要 1 小时,但运行良好。

问题是我需要从另一个 PHP 页面运行它。所以这段代码 - exec('start c:\php\php.exe "D:\Web\phpScript.php"');在 PHP 中运行脚本。当我像这样从 PHP 运行它时,它可以运行大约 30 分钟左右,但由于某种原因,Windows 最终会在大约 30 分钟后终止该进程。

我一直在查看 Windows 上的任务管理器,与我直接从命令提示符运行它或使用 PHP 运行命令相比,我看不出该进程的运行方式有什么不同。它们都显示为后台进程,并且在任务管理器中看起来完全相同,但由于某种原因,Windows 正在杀死从 PHP 运行的进程,而不是直接从命令提示符运行的进程。

我什至尝试过实时运行 PHP,我想如果它具有更高的优先级,它可能不会被杀死,但这并没有帮助。

我真的被这个困住了。

任何帮助都会很棒。

谢谢!

【问题讨论】:

  • 使用进程资源管理器而不是任务管理器。它还将向您显示调用二进制文件的父进程。如果它在父进程空间内运行,则父进程可能会在 30 分钟后注意到并杀死它,而当您从 CLI 窗口运行它时不会在意。
  • 是的,你是对的。它在启动它的原始 php-cgi.exe 下运行。所以看起来 PHP 正在扼杀它。我已经在 PHP 页面上使用了 time_limit,但我认为这不会在这里发挥作用。任何其他想法如何让 PHP 停止杀死它?
  • 这可能是您的网络服务器的设置。您使用的是哪个网络服务器?哪个服务器 API?
  • 不幸的是 IIS 8。感谢您的帮助!
  • 检查 IIS 8 的文档,哪些限制是为生成 CGI 进程设置的。我可以想象网络服务器会主动杀死长时间运行的 CGI 生成。还要检查 Windows 事件日志。

标签: php windows command-line


【解决方案1】:

如果它与您的 PHP 配置有关,您可以在脚本开头强制允许一定的执行时间

set_time_limit(60*60*2); // allows 2 hours execution time

然后执行外部文件只需在脚本中使用include('D:\Web\phpScript.php');

http://php.net/manual/en/function.set-time-limit.php

否则,如果它是一个服务器问题,击败我。当然,您可以...在您的网络浏览器中运行它,而不是在命令提示符下,如果机器上安装了 PHP。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    相关资源
    最近更新 更多