我应该在PHP项目中使用什么来进行简单的cron作业管理?

时间:2011-02-09 17:45:37

标签: php cron scheduling crontab scheduler

我想在PHP项目中进行简单的类似cron的管理 有一些我想要的东西:

  1. php job worker只是简单的脚本,放在项目目录中的某个子目录中
  2. 项目根目录中有/ cron / daily,/ cron / monthly ...等子树,其中包含所有工作人员
  3. 没有必要在添加每个工作人员的情况下弄乱crontab。
  4. 所有脚本都由具有相应频率的run-parts运行,并且它们各自的输出被记录到单独的文件中,如/var/log/projectname/cron/daily/somescript.log
  5. 如果/ cron / daemon dir包含应该永久运行(每分钟)但不超过1个实例的脚本,那将是很棒的
  6. 我在一个项目中有过这种调度系统的经验并且喜欢它。它提供了许多巧妙的东西:

    • 作业是项目脚本,驻留在项目目录中,由git跟踪。
    • 不需要crontab搞乱。
    • 日志已整理出来。
    • 守护进程很容易构建。

    我只是在project / cron子目录上使用/ bin / run-parts,但是没有设法按我的意愿分割日志。分割日志记录是非常好的功能。

    所以,我只是觉得这种系统之前已经创建了很多次,有没有为PHP项目准备好使用的解决方案?基本上它只是一些更智能的运行部件相当于。应该再写一次吗?

    P.S。还有更多像Jobman这样的特定于作业队列的解决方案。他们很棒,但这个问题是关于项目cron jobs轻量级解决方案。

3 个答案:

答案 0 :(得分:2)

我们目前的工作采取了略微不同的方法。我们使用Jenkins(以前称为Hudson)来满足我们与PHP相关的调度需求。这很好,因为您可以利用现有的通知基础设施(jabber,电子邮件等),它与我们的代码发布的其他构建作业并列。还可以实时查看控制台输出,获取每次运行的成绩单等。

我最近记录了我们组织PHP作业的方式,以便我们可以轻松利用CLI中的应用程序框架,这就是Jenkins与作业的接口。

这是关于组织用于Jenkins或Hudson的PHP批处理作业的帖子:

http://blog.shupp.org/2011/03/15/organizing-php-batch-jobs/

答案 1 :(得分:0)

用PHP编写的

Periodic is a CRON compatible task manager。为了使它像你想要的那样工作,仍然有一些工作要做,但它应该给你一个很好的基础。

答案 2 :(得分:-1)

使用此功能:

function parse_crontab($time, $crontab)
         {$time=explode(' ', date('i G j n w', strtotime($time)));
          $crontab=explode(' ', $crontab);
          foreach ($crontab as $k=>&$v)
                  {$v=explode(',', $v);
                   foreach ($v as &$v1)
                           {$v1=preg_replace(array('/^\*$/', '/^\d+$/', '/^(\d+)\-(\d+)$/', '/^\*\/(\d+)$/'),
                                            array('true', $time[$k].'===\0', '(\1<='.$time[$k].' and '.$time[$k].'<=\2)', $time[$k].'%\1===0'),
                                            $v1
                                           );
                           }
                   $v='('.implode(' or ', $v).')';
                  }
          $crontab=implode(' and ', $crontab);
          return eval('return '.$crontab.';');
         }
var_export(parse_crontab('2011-05-04 02:08:03', '*/2,3-5,9 2 3-5 */2 *'));
var_export(parse_crontab('2011-05-04 02:08:03', '*/8 */2 */4 */5 *'));