cron在一天的特定时间工作 - 有什么限制?

时间:2011-05-09 21:14:09

标签: php mysql cron crontab

我在使用PHP使用Cron作业时提出了一些建议。我的情况是:

我有一个拥有大量会员资格的网站。用户有一个或多个与其帐户关联的URL。在午夜(或某个时间),我想调用一个脚本,该脚本将查询每个用户的网站,并使用它找到的信息更新数据库。可以把它想象成一种屏幕刮刀服务。

我的问题是关于服务器的压力。我将在共享服务器上测试这个新功能,但最终我将转移到专用服务器。

因此,如果c.5000成员资格各有2个URL,那么它将查询10,000个网站。人们认为最好的方法是什么?有一个运行前500名成员的cron工作 - 然后10分钟后运行下一个500等等......

还是有一些我从未听说过的可能有帮助的魔法!?

感谢您的任何提示!

3 个答案:

答案 0 :(得分:2)

cron是一个很好的工具,可以用于这样的基本概念。然而,正如你所推测的那样,它的扩展性很差!查看作业处理工具,如开源(和多语言)Gearman:

http://gearman.org/

对于手头的任务来说,这应该是一个更强大的系统。

答案 1 :(得分:0)

我会每天安排一个脚本,让脚本一个接一个地查询10,000个网站。只需一个脚本循环遍历所有网站并发送请求并逐个处理结果。对于这种数字,没有必要做任何更困难的,imho。

答案 2 :(得分:0)

正如所建议的那样,您可以按顺序一次性运行URL脚本。这是最简单的方法。

如果速度不够快,您可以轻松修改您的cron脚本,以便您可以在奇数/偶数上运行它。从午夜开始两次运行脚本,一次用于赔率,一次用于平均值,只要你没有耗尽机器上的任何资源,它应该以两倍的速度运行。

在实现这个方面,我会考虑让脚本接受两个整数值,让你定义模数和余数。例如。对于奇数,即使您定义“2 0”和“2 1”,这将导致对{SQL}数据库执行SELECT * FROM myTable WHERE id % 2 == 0SELECT * FROM myTable WHERE id % 2 == 1之类的操作。使用这种方法,可以很容易地配置任意数量的作业并行运行。

gearmand是非常强大的,我已经在许多项目中使用它,但它有更大的学习曲线。我认为我建议的简单解决方案可以帮助你。