simtecsystem/cake-scheduler

CakePHP 3 的 Cron 调度程序

安装: 2

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 1

分支: 6

类型:cakephp-plugin

1.0.0 2017-10-02 22:56 UTC

This package is auto-updated.

Last update: 2024-09-23 21:29:05 UTC


README

CakePHP 3 的 Cron 调度程序插件

目录

简介

CakeScheduler 允许您直接从 PHP 文件中编写 cron 作业。它适用于 CakePHP Shell 以及任何其他有效的 PHP 代码。基本上,它是一种传统 crontab 文件的替代品。

为何使用它

传统编写 cron 作业的方法是每次需要安排作业时在 crontab 文件中添加一个条目。这种方法的问题是需要每次都登录到服务器(SSH)。

通过使用 CakeScheduler,我们能够将 cron 作业放入源代码控制系统中,并像部署任何其他 PHP 代码一样部署它们。

安装

  • 要安装 CakeScheduler 插件,您可以使用 composer。从您的应用程序的根目录(位于 composer.json 文件所在的目录)运行以下命令:

    composer require simtecsystem/cake-scheduler

  • 您需要将以下行添加到应用程序的 config/bootstrap.php 文件中:

    Plugin::load('CakeScheduler');

  • 您必须通过 vendor/lavary/crunz/crunz publish:config 导出 Cruz 配置。

启动调度程序

我们只需要安装一个每分钟运行一次的普通 cron 作业。这个 cron 作业将启用 CakeScheduler 来安排所有后续作业。

* * * * * /path-to-project/bin/cake cake_scheduler run schedule:run

定义调度计划

调度计划基本上是一个以 Tasks.php 结尾的 PHP 文件,并且必须返回 CakeSchedule 对象。所有调度计划都应该放在一个名为 src/Shell/Schedule/ 的文件夹内。

例如

// schdule/BackTasks.php
$schedule = new \CakeScheduler\Schedule\CakeSchedule();
$schedule
    ->run('/usr/bin/php backup.php')
    ->daily()
    ->description('Test');
return $schedule;

调度 CakePHP Shell

要调度一个 CakePHP Shell,调用 CakeSchedule::shell

$schedule->shell('MyCake awesome')

调度任何其他命令

要调度任何其他命令,调用 CakeSchedule::run

$cakeSchedule->run('/usr/bin/php backup.php')

频率选项

有许多方法可以定义执行频率

在底层,CakeSchedule 使用了出色的 lavary/crunz 库。它有许多配置执行频率的选项。如果您需要更多可用的频率,请查看其官方文档。

钩子

钩子使得与其他服务(如 www.watchowl.io)集成变得容易。

作业运行前

在作业执行前做一些事情,我们可以使用 before() 钩子

例如

$schedule = new \CakeScheduler\Schedule\CakeSchedule();

$schedule
    ->run('/usr/bin/php backup.php')
    ->before(function() { 
        // Do something before the job runs
     })
    ->daily()
    ->description('Test');
    
return $schedule;

作业完成后

在作业执行前做一些事情,我们可以使用 before() 钩子

例如

$schedule = new \CakeScheduler\Schedule\CakeSchedule();

$schedule
    ->run('/usr/bin/php backup.php')
    ->after(function() { 
        // Do something after the job is finished
     })
    ->daily()
    ->description('Test');
    
return $schedule;