我正在使用Yii扩展程序 runactions要运行后台进程,我尝试更新批量记录(6000)作为后台进程,但只有大约2500条记录只在DB中更新!!! 我没有在日志中收到任何错误,它与间隔或超时问题有关吗?
我尝试更改runactions中的间隔但是没有效果,有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
此扩展程序在http级别执行后台作业,因此您必须管理脚本max-execution-time,我不认为此扩展程序会处理它。在命令行执行的情况下,max-execution-time不适用。
http://php.net/manual/en/info.configuration.php#ini.max-execution-time
通常对于漫长的过程,而不是禁用tiemout,我在循环中递增它,如下所示:
while ($i <= 10) {
my_complex_update_query();
echo "Timeout is : " . ini_get('max_execution_time') . " sec.<br>";
set_time_limit(ini_get('max_execution_time') + 1);
echo "NEW Timeout is : " . ini_get('max_execution_time') . " sec.<br>";
$i++;
}
这增加了每个周期增加1秒的时间限制,显然你必须根据需要调整它,比如每10个周期增加1秒。 这样,如果脚本由于某种原因而卡住,它将无论如何都会超时并且不会挂起内存。
考虑在脚本执行时间内不计算外部调用(如数据库查询,系统调用的执行...)。 因此,如果您的脚本执行时间为5秒,则执行需要2分钟执行的查询,当脚本执行以下指令时,执行时间仍为5秒而不是2分钟+ 5秒。