php 有没有办法循环任务调度器?

c8ib6hqw  于 2023-10-15  发布在  PHP
关注(0)|答案(1)|浏览(135)

我正在使用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. 
   //}

}
ht4b089n

ht4b089n1#

你不能在schedule方法中循环。所有这一切都应该做的是定义一个cron时间表。实际的命令不在schedule方法中运行。
您可以使命令每分钟运行一次,并将其设置为不重叠。这样,它将尝试每分钟启动一次命令,但如果前一次尝试仍在运行,它将跳过它。

protected function schedule(Schedule $schedule)
{
    $schedule->command('catalog:update')->everyMinute()->withoutOverlapping();
}

相关问题