我正在使用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.
//}
}
1条答案
按热度按时间ht4b089n1#
你不能在schedule方法中循环。所有这一切都应该做的是定义一个cron时间表。实际的命令不在schedule方法中运行。
您可以使命令每分钟运行一次,并将其设置为不重叠。这样,它将尝试每分钟启动一次命令,但如果前一次尝试仍在运行,它将跳过它。