Я использую планирование задач Laravel и собираю данные из группы URL в цикле for. Вот почему я не знаю точно, когда закончится один цикл. Я пытался настроить цикл в ядре schedule()
метод, как указано в этом вопрос но это, кажется, не работает эффективно.
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.
//}
}
Вы не можете цикл в методе расписания. Все, что предполагается сделать, это определить расписание cron. Фактическая команда не выполняется внутри метода расписания.
Вы можете заставить команду выполняться каждую минуту и установить, чтобы она не перекрывалась. Таким образом, он будет пытаться запустить команду каждую минуту, но пропустит ее, если предыдущая попытка все еще выполняется.
protected function schedule(Schedule $schedule)
{
$schedule->command('catalog:update')->everyMinute()->withoutOverlapping();
}
Других решений пока нет …