2016-05-05 207 views
0

为多个用户执行cron-job自动化的最佳方式是什么?Cron作业 - PHP脚本 - 多个用户?

一个cron作业需要每10分钟运行调用(通过卷曲)连接到外部API并收集数据(网站访问者和其他数据)一个PHP脚本用户已收到外部网络媒体资源。我们需要每隔10分钟通过API定期检查一次,如果该用户有任何新的数据可用并获取它 - 并且在网络应用程序中为每个用户提供

这样的cron作业PHP脚本调用API通常需要1-3秒每用户,但也有时可能需要长达30秒或更长时间才能完成一个用户(在特殊情况下)。

问题 ...

什么是执行这一程序,收集外部数据一样,为多个用户的最佳方法是什么? 数百甚至数千用户?

对于每个用户,我们需要每10分钟检查一次数据。

本来我打电话连续10个用户在一个时钟守护作业调用一个循环的思维,但由于每个用户采集可需要30秒...... 10个用户环路可能需要几分钟,并......该脚本可能会超时?正确?

您是否对如何最有效地为许多用户执行此过程有一些提示和建议?应该为每个用户使用单独的cron作业吗?而不是循环?

谢谢!

===编辑===

比方说,一个PHP脚本可以调用API 1分钟内10个用户...我可以创造10个时钟守护作业,基本上同时调用同一个PHP脚本,但每个人收集一批不同的10个用户?这样我可以在一分钟内为100个用户获取数据?没有?

它看起来是这样的:??

在/ usr/local/bin目录/ PHP -q get_data.php users_group = 1

在/ usr/local/bin目录/ PHP -q get_data.php users_group = 2

在/ usr/local/bin目录/ PHP -q get_data.php?users_group = 3

等等...

难道这是否可行呢?

===注释===

每个用户都有与外部API服务的唯一访问密钥,所以一个API调用只能是一次一个用户。但是API可以同时接收多个同时呼叫不同的用户。

+1

由cli(包括cron)调用的脚本没有时间限制。也就是说,对于数千用户,每10分钟30秒显然不会工作 –

+0

假设我有10个独立的cron作业几乎同时调用同一个php脚本......这是否会起作用?事情是,每个用户每次API调用大多数时间需要1-3秒。只有极少数情况下可能需要10秒钟(我经历过的最多时间),而我只需30秒就可以确保...如果API提供商的服务器被卡住或者如此... ... – user1033406

+0

便宜的多线程 - 我做这但将进程数量限制为内核数量。之后,他们所做的一切都提示并且你没有任何好处 –

回答

2

如果需要30秒的用户,并有超过20个用户,你需要再次启动前,您将无法完成。我会考虑使用GearMan或其他作业服务器以异步方式处理这些请求中的每一个。 GearMan也可以等待作业完成,所以你应该能够遍历所有你需要做的请求,然后等待它们完成。你可以用PHP的pthread实现来完成同样的事情,但是,这将会变得更加困难。

+0

谢谢你的这些建议。有趣。是的,API调用很少会花费2-3秒以上。我经历过的高峰大概是10秒,因为他们身边还有另一个循环,他们的服务器有时会被卡住。我想确保......这就是“长达30秒”的原因。我已经有了一个PHP脚本,它将所有用户及其所有任务排成一排,以便一次执行很少的任务。再次感谢提示。我会研究它。 – user1033406