kalading/yii2-cronjobs

为 yii2 的 cron 作业调度器

安装: 0

依赖: 0

建议者: 0

安全: 0

类型:yii2-extension

dev-master 2020-05-09 07:02 UTC

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