fedemotta / yii2-cronjob
Yii2 扩展,用于帮助创建自动化控制台脚本
v1.1
2015-10-07 20:47 UTC
Requires
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-09-14 18:04:16 UTC
README
Yii2 扩展,用于帮助创建自动化控制台脚本。它帮助管理控制台脚本的执行,例如避免在先前的 cron 正在运行时执行。它生成已执行 cron 的历史记录,包括花费的时间,并帮助批量处理脚本。
安装
安装此扩展的首选方式是通过 composer。
可以运行以下命令
php composer.phar require --prefer-dist fedemotta/yii2-cronjob "*"
或者在您的 composer.json
文件的 require 部分添加以下内容:
"fedemotta/yii2-cronjob": "*"
此扩展需要一个数据库来管理 cron 作业的执行。运行以下迁移以创建表结构:
yii migrate --migrationPath=@fedemotta/cronjob/migrations
使用方法
扩展安装完成后,您可以在控制台控制器中将其用作辅助工具。
请参阅以下示例
<?php namespace somenamespace\controllers; use fedemotta\cronjob\models\CronJob; use somenamespace\SomeModel; use yii\console\Controller; /** * SomeContrController controller */ class SomeContrController extends Controller { /** * Run SomeModel::some_method for a period of time * @param string $from * @param string $to * @return int exit code */ public function actionInit($from, $to){ $dates = CronJob::getDateRange($from, $to); $command = CronJob::run($this->id, $this->action->id, 0, CronJob::countDateRange($dates)); if ($command === false){ return Controller::EXIT_CODE_ERROR; }else{ foreach ($dates as $date) { //this is the function to execute for each day SomeModel::some_method((string) $date); } $command->finish(); return Controller::EXIT_CODE_NORMAL; } } /** * Run SomeModel::some_method for today only as the default action * @return int exit code */ public function actionIndex(){ return $this->actionInit(date("Y-m-d"), date("Y-m-d")); } /** * Run SomeModel::some_method for yesterday * @return int exit code */ public function actionYesterday(){ return $this->actionInit(date("Y-m-d", strtotime("-1 days")), date("Y-m-d", strtotime("-1 days"))); } }
运行 SomeModel::some_method 今天的操作
./yii some-contr
昨天的操作
./yii some-contr/yesterday
像这样的自定义日期操作
./yii some-contr/init 2010-10-10 2012-10-10
您还可以添加一个每10分钟运行一次的 cron 作业,使用以下控制器操作
*/10 * * * * /path/to/yii/application/yii some-contr/yesterday >> /var/log/console-app.log 2>&1