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

时间:2017-03-13 22:09:50

标签: php laravel cron crontab taskscheduler

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

}

1 个答案:

答案 0 :(得分:0)

您无法在计划方法中循环。应该做的就是定义一个cron时间表。实际命令不在schedule方法中运行。

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

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