有没有办法循环任务调度程序?

问题描述 投票:0回答:1

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

}
php laravel cron scheduled-tasks
1个回答
0
投票

你不能在schedule方法中循环。所有要做的就是定义一个 cron 计划。实际命令不在计划方法内运行。

您可以使命令每分钟运行一次并将其设置为不重叠。这样,它将尝试每分钟启动该命令,但如果之前的尝试仍在运行,它将跳过它。

protected function schedule(Schedule $schedule)
{
    $schedule->command('catalog:update')->everyMinute()->withoutOverlapping();
}
© www.soinside.com 2019 - 2024. All rights reserved.