kalading / yii2-cronjobs
为 yii2 的 cron 作业调度器
Requires
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2020-08-02 11:21:36 UTC
README
将 crontab 放在您的控制台脚本中的最简单方法。
此扩展基于此存储库为 yii1:https://github.com/Yiivgeny/Yii-PHPDocCrontab 以及为 yii2:https://github.com/DenisOgr/yii2-cronjobs。
peopleperhour 包添加了一些更多功能,例如 1) 额外的日志记录 2) 正确的 cron-tags 功能
安装
- 步骤 1: 安装此扩展的首选方法是使用 composer。
运行以下命令:
php composer.phar require --prefer-dist peopleperhour/yii2-cronjobs "dev-master"
或将以下内容添加到您的 composer.json
文件的 require 部分:
"peopleperhour/yii2-cronjobs": "dev-master"
添加到 console config 的别名 @runnerScript。这是运行脚本的绝对路径(我没有找到其他获取运行脚本的方法)。根据您的项目更改运行脚本的路径。
- 步骤 2: 在控制台配置中设置别名 @runnerScript。这是运行脚本的绝对路径(我没有找到其他获取运行脚本的方法)。根据您的项目更改运行脚本的路径。
Yii::setAlias('@runnerScript', dirname(dirname(dirname(__FILE__))) .'/yii');
- 步骤 3: 添加到控制台配置
'controllerMap' => [ 'cron' => [ 'class' => 'peopleperhour\cronjobs\CronController' ], ],
- 步骤 4: 将任务添加到系统计划程序(Unix 上的 cron,Windows 上的任务计划程序,systemd 服务)以每分钟运行一次
* * * * * /path/to/yii/application/protected/yii cron
在 params 数组中添加 cron 设置
'params' => [
'test/example1' => [
'cron' => '* * * * *',
],
'test/example2' => [
'cron' => '10 * * * *',
],
],
- 步骤 5: 添加日志记录
提供了两种级别的日志记录。
a) 记录 cron 机制输出的内容
记录进入 cron 机制的事件。
示例输出
2015-06-11 09:48:36 [-][-][-][info][cronjobs] 运行任务 [1]: runtestcron test
in /var/www/vendor/peopleperhour/yii2-cronjobs/CronController.php:260
2015-06-11 09:48:36 [-][-][-][info][cronjobs] 在 Thu, 11 Jun 2015 09:48:36 +0000 运行 1 个任务
in /var/www/vendor/peopleperhour/yii2-cronjobs/CronController.php:264
设置
在您的配置中,将以下内容设置在 log 组件中
'components' => [
'log' => [
'targets' => [
[
'class' => 'yii\log\FileTarget',
'logFile' => 'somelogfile.log',
'categories' => ['yii2-cronjobs']
],
],
],
]
"categories" 元素是 peopleperhour/yii2-cronjobs 扩展中使用的默认类别。如果您想更改它,请输入上述名称,并在 controllerMap 中设置 logsCategory 字段。
例如。
'controllerMap' => [
'cron' => [
'class' => 'peopleperhour\cronjobs\CronController',
'logsCategory' => 'somenewcategory',
],
],
b) 记录正在运行的命令的输出
有两种方法可以记录正在运行的命令的输出。
第一种是 catchall 方法,您可以将文件名添加到您的 controllerMap 中。
例如。
'controllerMap' => [
'cron' => [
'class' => 'peopleperhour\cronjobs\CronController',
'logFileName' => 'somelog',
],
],
第二种方法是可以通过更改 cron 规范使用 "cron-stdout" 指令来具体指定每个 cron 命令的输出。
'params' => [
'test/example1' => [
'cron' => '* * * * *',
'cron-stdout' => 'example1-out',
'cron-stderr' => 'example1-err'
],
'test/example2' => [
'cron' => '10 * * * *',
],
],
上述内容将覆盖 controllerMap 中的 catchall 输出并将输出发送到指定的 cron-stdout 日志文件。
- 步骤 6: 添加标签以在特定环境中运行
如果您需要在运行 crons 时分离环境,您可以将 cron-tags 参数添加到 cron 配置中
'params' => [
'test/example1' => [
'cron' => '* * * * *',
'cron-stdout' => 'example1-out',
'cron-stderr' => 'example1-err'
'cron-tags' => 'live staging'
],
],
然后在您的计划程序中运行带有请求标签的 cron 命令
例如。
* * * * * /path/to/yii/application/protected/yii cron live