【发布时间】:2014-10-27 19:21:35
【问题描述】:
我们基于 Zend 1 的系统有一个后台进程作为守护进程运行,每小时检查用户是否过期,如果是,系统将向这些过期用户发送验证邮件。
代码真的很简单:
while(1) {
$worker = ... //get verification worker
$worker->run();
sleep(3600); //run hourly
}
我们希望使用免费工具寻找更好的方法来替换此代码以在系统中安排作业。 Zend Job Queue 是一个非常好的方法,但它是商业的。
我对以下两种方法作为 Zend Job Queue 替代方案的看法:
不是运行守护程序,而是在 crontab 上配置 cron 作业以每小时运行 PHP 脚本,但我不确定上面的代码是否更好。
在nodejs服务器上运行node cron直接调用PHP脚本。
我也看过 Gearman 和 beanstalk,他们是否支持作业调度,但真的被这种方式难住了。
请建议是否有更好的方法来在 PHP 上安排任务。
【问题讨论】:
-
使用原生
crontab;长时间运行的 PHP 脚本往往会在特定时间点失败。sleep(3600);也不准确。 -
@DanFromGermany:感谢您的评论,除了长时间的 PHP 运行往往会在特定时间点失败之外,在这种情况下,还有哪些 crontab 更可取的点?我对这个东西很陌生,我的情况确实需要准确的时间点。
-
crontab易于维护(您可以使用/etc/cron.d文件夹对作业进行分组),时间准确(我见过的最大关闭时间为 1 秒)。我正在使用 crontab 在单个服务器上运行数百个 cronjobs,并且一切正常。
标签: php cron gearman beanstalkd