任务调度如何从数据库内进行读取!!! 跪求方案,写完立马开源
我想做一个任务调度系统,想把所有的调度任务放在数据库中。然后在Kernel.php用数据库进行读取循环,然后去执行调度,我目前测试执行exec命令没有问题,但是要根据数据库配置的是否后台运行,是否避免任务重复运行来进行执行的话就不知道怎么做了。
下面的直接执行命令是没有任何问题。
protected function schedule(Schedule $schedule)
{
//调用模型对象
$objSchedule = new \App\Models\Schedule();
//获取全部的调度任务
$objSchedules = $objSchedule->all();
foreach ($objSchedules as $objSchedule) {
$schedule->exec($objSchedule->command);
}
}
但是数据库中还有其他的配置,如后台执行,避免任务重复执行,等如
CREATE TABLE `schedules` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务名称',
`frequency` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '执行频率',
`command` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '执行的 Shell 命令',
`is_locked` tinyint(1) NOT NULL DEFAULT '1' COMMENT '任务是否上锁,以防止重复执行(1 表示锁定,0 表示未锁定)',
`lock_duration` tinyint(1) DEFAULT NULL COMMENT '任务上锁的时间(以小时为单位)',
`is_sequential` tinyint(1) NOT NULL COMMENT '任务是否按顺序执行0按照顺序 1多线程',
`status` tinyint(1) DEFAULT '1' COMMENT '任务状态0暂停运行 1开启运行',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='调度列表';
然后我想根据 is_locked 加上->withoutOverlapping()
根据 is_sequential 加上->runInBackground()
这个判断语句怎么加入到这个代码中呢,不会写啊
github.com/jiannei/laravel-schedul...