我计划每7分钟运行一次CronJob。该脚本在多个用户上运行一个循环,并通过SMTP发送电子邮件或通过curl执行一些API调用。
因此,大多数执行时间显然都是在Linux上由max_execution_time
跟踪的领域之外度过的。所以,因为我在我的脚本中经历了挂起(我也在寻找挂起的原因,但到目前为止还没有成功)。
因为当set_time_limit设置为6分钟时,脚本有时仍然运行30分钟,所以我现在检查循环中每一轮之后的microtime(true)
,如果它运行超过6分钟,就退出它。
尽管如此,这个脚本有时会运行37分钟(尽管我可以看到映射到一个循环中一轮的电子邮件仍在运行)。
我唯一剩下的诀窍就是pcntl_fork
。我不愿意使用它,因为它依赖于平台,而且我认为使用循环和microtime(true)
也应该跟踪在流程之外花费的时间,我想了解为什么这里不是这样的。
发布于 2014-08-06 04:19:30
最后,我到PHP之外获取时间,这很简单,很有效,不需要我学习如何处理pcntl函数。
$time_comp = microtime(true); // save start time
function check_time_against_mysql($dbh,$time_comp) // run this function
{ // to see how much time passed
$time = $dbh->prepare("SELECT UNIX_TIMESTAMP() - :created AS time_in_seconds");
$time->bindValue(":created",$time_comp);
$time->execute() or die("fail time");
$time_passed = $time->fetch(PDO::FETCH_ASSOC);
return floatval($time_passed['time_in_seconds']);
}
发布于 2014-05-04 10:36:28
max_execution_time
用于限制脚本执行时间。但是,这不影响系统调用。见命令页。
您还可以使用set_time_limit()
正确地设置脚本可以运行的最大时间。这只会更改范围内脚本的time_limit。你也试过这个吗?
您可以在此链接中找到另一个被问到的问题可能会稍微有所帮助。
https://stackoverflow.com/questions/23459988
复制相似问题