webtoolsnz / yii2-scheduler
Yii2应用的任务调度运行器
0.1.19
2020-06-08 02:52 UTC
Requires
- mtdowling/cron-expression: ~1.0
- webtoolsnz/yii2-widgets: *
- yiisoft/yii2: ^2.0.9
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-13 06:47:31 UTC
README
yii2的任务调度管理器
安装
安装此扩展的首选方式是通过 composer.
使用以下命令进行安装。
$ composer require webtoolsnz/yii2-scheduler
现在包已安装,您需要在您的应用程序中配置模块
应更新 config/console.php
文件以反映以下更改
'bootstrap' => ['log', 'scheduler'], 'modules' => [ 'scheduler' => ['class' => 'webtoolsnz\scheduler\Module'], ], 'components' => [ 'errorHandler' => [ 'class' => 'webtoolsnz\scheduler\ErrorHandler' ], 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\EmailTarget', 'mailer' =>'mailer', 'levels' => ['error', 'warning'], 'message' => [ 'to' => ['admin@example.com'], 'from' => [$params['adminEmail']], 'subject' => 'Scheduler Error - ####SERVERNAME####' ], 'except' => [ ], ], ], ], ]
同时,请将以下内容添加到您的 config/console.php
文件顶部
\yii\base\Event::on( \webtoolsnz\scheduler\console\SchedulerController::className(), \webtoolsnz\scheduler\events\SchedulerEvent::EVENT_AFTER_RUN, function ($event) { if (!$event->success) { foreach($event->exceptions as $exception) { throw $exception; } } } );
要实现调度程序的GUI,请将以下内容添加到您的 config/web.php
'bootstrap' => ['log', 'scheduler'], 'modules' => [ 'scheduler' => ['class' => 'webtoolsnz\scheduler\Module'], ],
更新配置文件后,需要在项目根目录中创建一个 tasks
目录。
运行数据库迁移,这将为 scheduler
创建必要的表
php yii migrate up --migrationPath=vendor/webtoolsnz/yii2-scheduler/src/migrations
添加控制器
<?php namespace app\modules\admin\controllers; use yii\web\Controller; /** * Class SchedulerController * @package app\modules\admin\controllers */ class SchedulerController extends Controller { public function actions() { return [ 'index' => [ 'class' => 'webtoolsnz\scheduler\actions\IndexAction', 'view' => '@scheduler/views/index', ], 'update' => [ 'class' => 'webtoolsnz\scheduler\actions\UpdateAction', 'view' => '@scheduler/views/update', ], 'view-log' => [ 'class' => 'webtoolsnz\scheduler\actions\ViewLogAction', 'view' => '@scheduler/views/view-log', ], ]; } }
示例任务
现在您可以使用调度程序创建第一个任务,在项目根目录中的 tasks
目录内创建文件 AlphabetTask.php
。
将以下代码粘贴到您的任务中
<?php namespace app\tasks; /** * Class AlphabetTask * @package app\tasks */ class AlphabetTask extends \webtoolsnz\scheduler\Task { public $description = 'Prints the alphabet'; public $schedule = '0 * * * *'; public function run() { foreach (range('A', 'Z') as $letter) { echo $letter; } } }
上面的代码定义了一个简单的任务,该任务在每个小时开始时运行,并打印出字母表。
此类中 $schedule
属性定义了任务将运行的频率,这些是简单的 Cron表达式
运行任务
调度程序提供了一个直观的CLI用于执行任务,以下是一些示例
# list all tasks and their status $ php yii scheduler # run the task if due $ php yii scheduler/run --taskName=AlphabetTask # force the task to run regardless of schedule $ php yii scheduler/run --taskName=AlphabetTask --force # run all tasks $ php yii scheduler/run-all # force all tasks to run $ php yii scheduler/run-all --force
要自动运行任务,只需设置一个像这样的crontab即可
*/5 * * * * admin php /path/to/my/app/yii scheduler/run-all > /dev/null &
事件 & 错误
事件在运行单个任务之前以及全局级别为多个任务抛出
任务级别
Event::on(AlphabetTask::className(), AlphabetTask::EVENT_BEFORE_RUN, function ($event) { Yii::trace($event->task->className . ' is about to run'); }); Event::on(AlphabetTask::className(), AlphabetTask::EVENT_AFTER_RUN, function ($event) { Yii::trace($event->task->className . ' just ran '.($event->success ? 'successfully' : 'and failed')); });
或在全局级别,向 /yii
抛出错误
$application->on(\webtoolsnz\scheduler\events\SchedulerEvent::EVENT_AFTER_RUN, function ($event) { if (!$event->success) { foreach($event->exceptions as $exception) { throw $exception; } } });
您可以在任务级别抛出异常,但这将阻止进一步的任务运行。
许可协议
MIT许可证(MIT)。有关更多信息,请参阅 LICENSE。