【问题标题】:Task/Job scheduling on PHPPHP 上的任务/作业调度
【发布时间】: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 替代方案的看法:

  1. 不是运行守护程序,而是在 crontab 上配置 cron 作业以每小时运行 PHP 脚本,但我不确定上面的代码是否更好。

  2. 在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


【解决方案1】:
0      *      *       *       *       /usr/bin/php -q /yourpath/verification_worker.php

您可以使用 crontab 每小时运行一次此任务

希望对你有帮助

【讨论】:

    【解决方案2】:

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

    见:http://en.wikipedia.org/wiki/Cron

    许多人还想考虑使用 Zend Server,它包含一个名为 Zend Job Queue 的组件,它提供任务和活动的离线异步处理。

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

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

    【讨论】:

    • 感谢您的回答,因为 Zend Server 是商业的,有没有像 Zend Job Queue 这样的免费工具来安排作业?
    • Linux 机器上使用最广泛的免费工具是 crontab,您可以通过 yum 或 aptitude 安装它,并且调度格式易于使用且有据可查。如果您使用的是 Windows,则可以使用 Windows 任务计划程序。
    猜你喜欢
    • 2018-09-03
    • 2013-10-05
    • 2011-03-09
    • 2018-10-17
    • 1970-01-01
    • 2015-01-06
    • 2017-11-13
    • 2014-07-30
    • 2017-10-11
    相关资源
    最近更新 更多