我喜欢每周运行一次运行php脚本的cron作业。
该脚本需要从数据库中获取所有用户并运行另一个脚本,该脚本向每个用户发送一封电子邮件,其中包含从外部API中提取数据的报告。
问题是,每个cron作业都有100mb的内存限制。如果我的数据库中有成千上万的用户,并且我需要从外部API检索大量数据,那么我很快就会超出内存限制。
有没有办法通过分解php脚本来解决这个问题?你的策略是什么?
答案 0 :(得分:4)
如果要分解脚本,可以保留每周cron,但不是发送邮件,而是可以将其排入数据库表。然后,使用每5或10分钟运行一次的第二个cron,您可以读取数据库邮件队列(搜索最多50或100行),如果找到了某些内容,则会发送一大堆电子邮件...
通常,此策略(大量队列加载,块中较小的队列处理)允许您拆分大型进程的执行。
答案 1 :(得分:3)
您是通过cli还是通过php页面运行cron作业? 尝试使用
通过cli运行它php -d memory_limit=256M yourscript.php
或在php.ini中设置内存限制
答案 2 :(得分:1)
你可以使用ini_set
来碰撞memory_limit
和max_execution_time
(通常是无限的命令)。 示例:
ini_set('memory_limit', '1G');
ini_set('max_execution_time', 0); // <-- infinite