我正在使用Laravel任务调度,我在for循环中从一堆网址中抓取数据。这就是为什么我不确定何时一个周期结束。我尝试在内核的schedule()
方法中设置for循环,如question中所述,但它似乎没有效率。
protected function schedule(Schedule $schedule)
{
$schedule->command('catalog:update')->everyMinute();
sleep(5);
$schedule->command('catalog:update')->everyMinute();
sleep(5);
}
我想要实现的是检测任务何时完成,然后再次运行它。就像创造一个永无止境的循环一样,但它们不应该重叠,因为它不会让我认为先前的刮擦完成(我是对的吗?)。
所以我想要这样的东西:
protected function schedule(Schedule $schedule)
{
$schedule->command('catalog:update');
// Detect when completed {
// run it again. Detect when completed again, etc as a loop.
//}
}
答案 0 :(得分:0)
您无法在计划方法中循环。应该做的就是定义一个cron时间表。实际命令不在schedule方法中运行。
您可以每分钟运行一次命令并将其设置为不重叠。这样它会尝试每分钟启动一次命令,但如果之前的尝试仍在运行,它将跳过它。
protected function schedule(Schedule $schedule)
{
$schedule->command('catalog:update')->everyMinute()->withoutOverlapping();
}