42 lines
1.4 KiB
PHP
42 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Process;
|
|
|
|
use App\Model\Crontab as cModel;
|
|
use App\Utils\Log;
|
|
use Hyperf\Crontab\Crontab;
|
|
use Hyperf\Crontab\Process\CrontabDispatcherProcess as BaseDispatcher;
|
|
use Hyperf\Crontab\CrontabManager;
|
|
use Psr\Container\ContainerInterface;
|
|
|
|
class CrontabDispatcherProcess extends BaseDispatcher
|
|
{
|
|
public function __construct(ContainerInterface $container, CrontabManager $manager)
|
|
{
|
|
$this->registerDatabaseTasks($manager);
|
|
parent::__construct($container);
|
|
}
|
|
|
|
protected function registerDatabaseTasks(CrontabManager $manager): void
|
|
{
|
|
try {
|
|
// 获取所有启用的定时任务
|
|
$tasks = cModel::queryEnable();
|
|
foreach ($tasks as $task) {
|
|
$crontab = (new Crontab())
|
|
->setName($task->crontab_id)
|
|
->setMemo($task->crontab_name)
|
|
->setEnable((bool)$task->enable)
|
|
->setRule($task->rule)
|
|
->setSingleton((bool)$task->singleton)
|
|
->setOnOneServer(true)
|
|
->setOptions(['skip_log' => $task->skip_log, 'callback' => $task->callback])
|
|
->setCallback(explode('@', $task->callback));
|
|
$manager->register($crontab);
|
|
}
|
|
} catch (\Throwable $e) {
|
|
// 记录日志
|
|
Log::record('动态加载crontab任务失败: ' . $e->getMessage(), 'error');
|
|
}
|
|
}
|
|
} |