2011-12-23 156 views
2

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

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

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

有办法通过分解PHP脚本来解决这个问题吗?你的战略是什么?

+0

我假设你的crond不会强迫内存限制只是为了好玩,所以你不应该通过发布子流程来解决它。你有命令行访问机器吗?然后,你可以写一个小脚本,除了执行这个工作,睡一周,做这个工作,睡一个星期......这不应该浪费太多的资源 – 2011-12-23 12:34:32

+0

我想你的'php'代码有一些问题:它发送邮件时不得消耗100MB – k102 2011-12-23 12:35:26

回答

4

如果你想分手的脚本,你可以离开了每周的cron但不是发送邮件,你可以排队到数据库中的表。然后,使用每5或10分钟运行一次的第二台cron,您可以读取数据库邮件队列(搜索最多50或100行),如果发现某些内容,则会发送大量电子邮件...

In一般来说,这种策略(庞大的队列加载,更小的队列处理)使您能够拆分大型进程的执行。

1

你可以使用ini_set来碰撞memory_limitmax_execution_time(尽管通常是无限的)。

例如:

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