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

Php 有没有办法循环任务调度器?,php,laravel,cron,crontab,taskscheduler,Php,Laravel,Cron,Crontab,Taskscheduler,我使用Laravel任务调度,在for循环中从一堆URL中提取数据。这就是为什么我不确定一个周期何时结束。我试图在内核的schedule()方法中设置一个for循环,如本文所述,但它似乎不能有效地工作 protected function schedule(Schedule $schedule) { $schedule->command('catalog:update')->everyMinute(); sleep(5); $schedule->command

我使用Laravel任务调度,在for循环中从一堆URL中提取数据。这就是为什么我不确定一个周期何时结束。我试图在内核的
schedule()
方法中设置一个for循环,如本文所述,但它似乎不能有效地工作

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计划。实际命令未在schedule方法内运行

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

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

我想要实现的是检测作业何时完成并重新运行它。并保持循环。在handleas
task()中执行是否更好;睡眠(5)//x5
?@senty为什么每分钟都做得不够好?您不能通过任务调度来实现这一点。您可以使用队列。在可排队作业中执行所有工作。然后,一旦作业完成,让它向队列中添加一个新实例。@senty实际工作未在schedule方法中完成。在那里睡觉对你没有好处。我想你误解了任务调度器的用途。从哪里开始研究队列?它是否设置了一个方法并触发它一次,然后永远保持循环?也许这是我应该使用的,而不是像你说的那样安排任务。@senty,这取决于你。一种方法是创建一个命令,该命令只分派第一个作业。然后在部署过程中运行该命令一次。