CrontabManager.php
3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
namespace common\components\crontabs;
use Yii;
use common\services\queue\job\TemplateMessageJob;
use common\models\CrontabSetting;
use function fopen;
use function feof;
use function fgets;
use function trim;
use function print_r;
use function fclose;
use function explode;
use function in_array;
use function json_decode;
use function preg_replace;
use function json_encode;
/**
* 系统定时任务管理器
* Class CrontabManager
* @package app\ht\modules\automation\CrontabManager
*/
class CrontabManager
{
const ROUTE_AUTO = 'crontab/auto'; // 秒级
const ROUTE_DAILY = 'crontab/daily'; // 每日凌晨0点
const ROUTE_HOURLY = 'crontab/hourly'; // 每小时
const ROUTE_WEEKLY = 'crontab/weekly'; // 每周日00:00
const ROUTE_MONTHLY = 'crontab/monthly'; // 秒级-定时任务
const ROUTE_MINUTELY = 'crontab/minutely'; // 秒级-定时任务
const ROUTE_MONDAY = 'crontab/monday'; // 秒级-定时任务
const ROUTE_DAILY8 = 'crontab/daily8'; // 秒级-定时任务
const ROUTE_DAILY12 = 'crontab/daily12'; // 每天中午12:00
/**
* 根据后台的crontab任务配置参数自动创建并加载后台crontab任务
* 注意: 需要在HT后台的[自动化业务]/[后台任务管理]配置好参数
*/
public static function loadCrontab()
{
$crontabs = Yii::$app->crontabs;
// 清除所有定时任务
$crontabs->clearJobs();
// 加载系统常规定时任务
$setting = CrontabSetting::findOne(1);
$crontabRootPath = $setting->crontab_root_path;
$autoJobNum = $setting->auto_job_num;
// 秒级定时任务
$crontabs->addJobByGroupName($crontabRootPath, '* * * * *', 'auto', self::ROUTE_AUTO, $autoJobNum);
// 每日凌晨0点定时任务
$crontabs->addJobByGroupName($crontabRootPath, '0 0 * * *', 'daily', self::ROUTE_DAILY, 1);
// 每小时定时任务
$crontabs->addJobByGroupName($crontabRootPath, '0 */1 * * *', 'hourly', self::ROUTE_HOURLY, 1);
// 每周日00:00定时任务
$crontabs->addJobByGroupName($crontabRootPath, '0 0 * * 0', 'weekly', self::ROUTE_WEEKLY, 1);
// 每月1号00:00定时任务
$crontabs->addJobByGroupName($crontabRootPath, '0 0 1 * *', 'monthly', self::ROUTE_MONTHLY, 1);
// 每分钟定时任务
$crontabs->addJobByGroupName($crontabRootPath, '*/1 * * * *', 'minutely', self::ROUTE_MINUTELY, 1);
// 每周一00:00定时任务
$crontabs->addJobByGroupName($crontabRootPath, '0 0 * * 1', 'monday', self::ROUTE_MONDAY, 1);
// 每天早上08:00定时任务
$crontabs->addJobByGroupName($crontabRootPath, '0 8 * * *', 'daily8', self::ROUTE_DAILY8, 1);
// 每天中午12:00定时任务
$crontabs->addJobByGroupName($crontabRootPath, '0 12 * * *', 'daily12', self::ROUTE_DAILY12, 1);
/**
* 加载模板消息的定时监听任务
*/
TemplateMessageJob::loadCrontab($crontabRootPath);
}
}