2014-09-03 89 views
1

我们基于Zend 1的系统有一个作为后台进程运行的后台进程,用于每小时检查用户是否过期,如果是,系统会向这些过期的用户发送验证邮件。PHP上的任务/作业调度

的代码是非常简单的:

while(1) { 
    $worker = ... //get verification worker 
    $worker->run(); 

    sleep(3600); //run hourly 
} 

我们想寻找有免费的工具,更好的方法来替换此代码在系统调度工作。 Zend Job Queue是非常好的方法,但它是商业的。

我下面的两个思维方法作为Zend的作业队列替代:

  1. 相反运行的守护进程,在crontab来每小时运行PHP脚本配置cron作业,但我不知道它是否是上面更好的代码与否。

  2. 在nodejs服务器上运行node cron直接调用PHP脚本。

我也看过Gearman和beanstalked他们是否支持作业调度,但真的很难在这方面。

请建议是否有更好的方法来安排PHP任务。

+1

使用本地'crontab';长时间运行的PHP脚本往往会在特定的时间点失败。 '睡(3600);'也不准确。 – DanFromGermany 2014-09-03 10:23:40

+0

@DanFromGermany:感谢您的评论,除了长时间PHP运行在特定时间点往往会失败,在这种情况下是否还有其他哪些crontab更适合?我对这个东西很新,我的情况确实需要准确的时间点。 – 2014-09-03 10:32:16

+1

'crontab'很容易维护(你可以使用'/ etc/cron.d'文件夹对作业进行分组),它在时间上是准确的(我见过的最大时间为1秒)。我在一台使用crontab的服务器上运行了几百个cronjob,并且所有的工作都很好。 – DanFromGermany 2014-09-03 10:33:46

回答

2

Cron肯定是自动化任务的首选方式,而不是无限循环中的php脚本。

看到:http://en.wikipedia.org/wiki/Cron

您也有不少需要考虑使用Zend服务器,其中包括一个名为Zend的作业队列组件,它的任务和活动的离线异步处理。

看到:http://files.zend.com/help/Zend-Server-6/content/jobs_component.htm

见:http://www.zend.com/en/products/server

+0

感谢您的回答,因为Zend Server是商业的,有没有任何免费的工具作为Zend Job Queue来安排工作? – 2014-09-03 10:36:06

+2

最广泛使用的免费工具是Linux机器上的crontab,您可以通过yum或aptitude安装它,并且调度格式使用简单并且文档齐备。如果你在Windows上,你可以使用Windows任务计划程序。 – matwr 2014-09-03 10:41:13

0
0  *  *  *  *  /usr/bin/php -q /yourpath/verification_worker.php 

你可以使用crontab运行此任务每小时

希望这有助于