【问题标题】:Is there a way to output something every 5 minutes during another process in PHP?有没有办法在 PHP 的另一个进程中每 5 分钟输出一次?
【发布时间】:2017-01-28 02:59:33
【问题描述】:

我有一个 cronjob,它导入一个巨大的文件然后处理它。导入过程需要很长时间,但是在 600 秒后,我正在运行脚本的服务器会中止 cronjob(超时)。在与服务器技术人员交谈后,他告诉我我需要在导入过程中输出一些东西,以使脚本在 10 分钟后不会中止。

我现在的问题是:假设我们有一个函数import() 可以导入文件(这个函数大约需要 20 分钟才能运行)。有什么方法可以同时echo 输出,例如每 5 分钟?还是因为 PHP 代码总是按顺序处理,所以这是不可能的?

【问题讨论】:

  • 这取决于您导入文件的方式。显示一些示例代码
  • 你能不能简单地提高最大执行时间限制? (例如 ini_set('max_execution_time', 3000))

标签: php cron timeout


【解决方案1】:

如果它是一个迭代过程,您可以设置一个变量$last_echo,其值为time()。 然后在每次迭代中检查time() - $last_echo > 300

例子:

$last_echo = time();
while (true) {
  //Do process
  if (time() - $last_echo > 300) {
    echo '.';
  }
}

【讨论】:

  • 我认为 cron 会将任何输出的电子邮件发送到控制台,如果你只是输出到日志文件,它会工作吗?
  • 您可以输出到日志,但默认情况下不会通过电子邮件发送给您。您也可以尝试将max_execution_time 提升为3600。可能是一个修复。
  • 感谢您的 cmets,但我尝试了所有不同的修复方法,但似乎它们并没有改变任何东西。 @RiggsFolly 显然没有输出需要直接而不是日志文件。
  • @L00_Cyph3r 不幸的是,如果我只有一个没有迭代过程的函数,这将不起作用。
  • 向我们展示执行导入的代码,然后我们可以实际看到我们正在处理的内容,而不仅仅是猜测
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
相关资源
最近更新 更多