我正在使用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();
}
我该如何实现?谢谢您的帮助。
答案 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