当前位置:  开发笔记 > 编程语言 > 正文

laravel动态添加调度程序

如何解决《laravel动态添加调度程序》经验,为你挑选了1个好方法。

我有一个系统,用户可以通过UI创建后台任务.
任务间隔是每隔几个小时(UI中的用户选择).

当用户通过ui创建任务时,我想动态地将它添加到调度程序.

如示例所示,这是静态的而不是动态的.

protected function schedule(Schedule $schedule)
{
    $schedule->call(function () {
        DB::table('recent_users')->delete();
    })->daily();
}

可能吗?如果没有,有哪些替代方案?

谢谢



1> Jonathon..:

我不明白为什么不可能.Kernel::schedule每次运行时都会运行该方法php artisan schedule:run.如果你像文档一样设置它,应该是每分钟通过一个cron.

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1

考虑到这一点,我不明白为什么你不能做这样的事情:

protected function schedule(Schedule $schedule)
{
    // Get all tasks from the database
    $tasks = Task::all();

    // Go through each task to dynamically set them up.
    foreach ($tasks as $task) {
        // Use the scheduler to add the task at its desired frequency
        $schedule->call(function() use($task) {
            // Run your task here
            $task->execute();
        })->cron($task->frequency);
    }
}

根据您存储的内容,您可以使用此处的任何内容而不是CRON方法.您可能在数据库中存储了一个字符串,表示Laravel的预定义频率之一,在这种情况下,您可以执行以下操作:

$frequency = $task->frequency; // everyHour, everyMinute, twiceDaily etc.
$schedule->call(function() {
    $task->execute();
})->$frequency();

这里要注意的主要事情是,计划实际上并不是在数据库中的任务或它管理的cron中进行调度.每次调度程序运行(每分钟)它都会运行,并根据您为每项任务提供的频率确定要运行的内容.

例:

您可以使用任务设置->hourly(),即每小时运行一次.

00:00,计划运行,->hourly()过滤器通过,因为时间是在一小时,所以您的任务运行.

00:01,计划运行,但这次->hourly()过滤器失败,因此您的任务不会运行.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有