Cron工作限制

时间:2011-12-23 12:29:58

标签: php cron

我喜欢每周运行一次运行php脚本的cron作业。

该脚本需要从数据库中获取所有用户并运行另一个脚本,该脚本向每个用户发送一封电子邮件,其中包含从外部API中提取数据的报告。

问题是,每个cron作业都有100mb的内存限制。如果我的数据库中有成千上万的用户,并且我需要从外部API检索大量数据,那么我很快就会超出内存限制。

有没有办法通过分解php脚本来解决这个问题?你的策略是什么?

3 个答案:

答案 0 :(得分:4)

如果要分解脚本,可以保留每周cron,但不是发送邮件,而是可以将其排入数据库表。然后,使用每5或10分钟运行一次的第二个cron,您可以读取数据库邮件队列(搜索最多50或100行),如果找到了某些内容,则会发送一大堆电子邮件...

通常,此策略(大量队列加载,块中较小的队列处理)允许您拆分大型进程的执行。

答案 1 :(得分:3)

您是通过cli还是通过php页面运行cron作业? 尝试使用

通过cli运行它
php -d memory_limit=256M yourscript.php 

或在php.ini中设置内存限制

选中此项以获取更多http://blog.urbaninsight.com/comment/1544

答案 2 :(得分:1)

你可以使用ini_set来碰撞memory_limitmax_execution_time(通常是无限的命令)。 示例:

ini_set('memory_limit', '1G');
ini_set('max_execution_time', 0); // <-- infinite