我正在使用 Laravel 任务调度,并在 for 循环中从一堆 url 中抓取数据。这就是为什么我不确定一个周期何时结束。我尝试在内核的
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.
//}
}
你不能在schedule方法中循环。所有要做的就是定义一个 cron 计划。实际命令不在计划方法内运行。
您可以使命令每分钟运行一次并将其设置为不重叠。这样,它将尝试每分钟启动该命令,但如果之前的尝试仍在运行,它将跳过它。
protected function schedule(Schedule $schedule)
{
$schedule->command('catalog:update')->everyMinute()->withoutOverlapping();
}