Laravel安排自定义设置

时间:2018-11-28 11:55:52

标签: php laravel laravel-5 scheduled-tasks

我正在使用Laravel 5.7,现在面临以下问题: 我有一个cronjobs表,其中包含许多cronjob记录。让我们举一个例子:

Record one should be repeated every 50 minutes

我创建了函数getMinutelyCronjobs,它需要从数据库中获取所有需要立即执行的cronjobs。

我这样行:我在命令Minutely.php中创建了一个类,在其中我在handle()函数中获得了所有这些cronjobs。当我初始化Minutely.php类中的所有数据时,无法使用handle()调用此$schedule->command('cronjobs:minutely')->everyMinute();函数。

问题在于,每个cronjob可能具有不同的minute_x(在我的示例中为50,重复出现),然后$schedule->command('cronjobs:minutely')->everyMinute();应该为$schedule->command('cronjobs:minutely')->everyMinute(50);

这是我的getMinutelyCronjobs函数:

public static function getMinutelyCronjobs(){
        $fields = ['id', 'protocol', 'script', 'minutes_frequency', 'login_user', 'login_password', 'email'];
        return Cronjob::select($fields)->where('minutely', 1)
               ->orderBy('id', 'desc')
               ->get();
    }

我该如何实现?谢谢您的帮助。

2 个答案:

答案 0 :(得分:1)

如果您可以每小时而不是每50分钟运行一次任务,那么第一个答案将起作用。如果您需要将其设置为每50分钟一次,则可以尝试执行类似的操作,该操作应该每50分钟而不是每60分钟运行一次。

编辑: 您没有提供从数据库中提取的与作业相关的数据的详细信息,但是您应该能够执行类似的操作来安排每个作业。

foreach ($jobs as $job) {
    $schedule->command($job->command)->everyMinute()->when(function () {
        $now = new \DateTime;
        $minutes = floatval($now->format('G'))*60 + floatval($now->format('i'));
        return $minutes % $job->minutes == 0;
    });
}

答案 1 :(得分:0)

everyMinute()而不是使用hourlyAt()方法

  

在每小时的50分钟之后每小时运行一次任务

$schedule->command('cronjobs:minutely')->hourlyAt(50);

有关更多信息,请阅读此article