simtecsystem / cake-scheduler
CakePHP 3 的 Cron 调度程序
Requires
- cakephp/cakephp: ~3.5
- lavary/crunz: ~1.4
Requires (Dev)
- phpunit/phpunit: ^5.7|^6.0
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;