schedule 对象 如何查看全部的任务,任务上次下次运行时间呢?

运行环境
laravel6.0

我现在想开发一套调度任务管理系统,希望可以通过
1.创建调度任务
2.查看所有的调度任务
3.删除调度任务

目前我想把所有的任务都放在数据库中,在Kernel.php的schedule方法内通过如:

    protected function schedule(Schedule $schedule)
    {
        $objTasks = DB::table("tasks")->get();
        foreach ($objTasks as $task){
            $schedule->exec($task->command)
                ->appendOutputTo("./调度ID{$task->id}.log");
        }
    }

进行运行

现在碰到的问题,我想知道这个Schedule这个类中是否有什么方法可以直接调出来这个任务的下次运行时间,上次运行时间等方法或者属性?

当然我可以通过回调事件写到数据库中,来查看任务的下次运行时间,上次运行的时间,但是我想是不是又什么方法可以直接读取出来。
目前我知道

app()->make(\Illuminate\Contracts\Console\Kernel::class);
$scheduleList = app()->make(\Illuminate\Console\Scheduling\Schedule::class)->events();

可以获取所有任务的对象,经过打印我发现是我数据库中的所有的任务,我也尝试打印了$scheduleList[0] 的属性和方法,里面的东西太多,我没办法全部看懂,我想大家是否知道?或者有相关的文档或者文章?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

$scheduleList [0]可以调用nextRunDate()获取下次执行时间,然后根据nextRunDate()的代码,也可以自己写一下获取上次执行时间

$event = $scheduleList[0];
//下次执行时间
$next = $event->nextRunDate()->format('Y-m-d H:i:s');
//上次执行时间
$pre = Date::instance((new CronExpression($event->getExpression()))
    ->getPreviousRunDate(timeZone:$event->timezone))->format('Y-m-d H:i:s');
dd($next,$pre);
7个月前 评论
liuhaiqiang999 (楼主) 7个月前
讨论数量: 9

php artisan schedule:list

可以看到下次运行时间, 上次运行时间看不到

7个月前 评论
liuhaiqiang999 (楼主) 7个月前
kis龍 (作者) 7个月前

$scheduleList [0]可以调用nextRunDate()获取下次执行时间,然后根据nextRunDate()的代码,也可以自己写一下获取上次执行时间

$event = $scheduleList[0];
//下次执行时间
$next = $event->nextRunDate()->format('Y-m-d H:i:s');
//上次执行时间
$pre = Date::instance((new CronExpression($event->getExpression()))
    ->getPreviousRunDate(timeZone:$event->timezone))->format('Y-m-d H:i:s');
dd($next,$pre);
7个月前 评论
liuhaiqiang999 (楼主) 7个月前

上次运行的时间需要去记录一下 可以给每一个任务加一个before方法 写一个通用callback 然后记录每个任务的开始时间 保存到数据库

下次运行时间可以实时去计算 像楼上说的那样

7个月前 评论
liuhaiqiang999 (楼主) 7个月前
7个月前 评论
liuhaiqiang999 (楼主) 7个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!