В настоящее время у меня есть запланированная консольная команда, которая выполняется каждые 5 минут без перекрытия, например:
$schedule->command('crawler')
->everyFiveMinutes()
->withoutOverlapping()
->sendOutputTo('../_laravel/storage/logs/scheduler-log.txt');
Итак, он отлично работает, но в настоящее время у меня около 220 страниц, которые занимают около 3 часов, и заканчиваются с шагом в 5 минут, потому что я просто заставляю его сканировать 10 страниц за каждый интервал, так как каждая страница занимает примерно 20-30 секунд для обхода из-за различных факторов. Каждая страница - это запись в базе данных. Если в итоге у меня будет 10 000 страниц для обхода, этот метод не будет работать, потому что потребуется больше 24 часов, и каждая страница должна пересканировать один раз в день.
Таким образом, мой поставщик разрешает до 10 одновременных запросов (или более с более высокими планами), так что лучший способ запустить его одновременно? Если я просто дублирую код планировщика, выполняет ли он одну и ту же команду дважды или 10 раз, если я дублирую ее 10 раз? Любые проблемы, которые могут возникнуть?
И тогда мне нужно передать параметры на консоль, такие как 1, 2, 3 и т.д., в которых я мог бы использовать, чтобы определить, какие страницы сканируются? то есть 1 будет 1-10 записей, 2 - следующие 11-20 записей и т.д.
Используя этот StackOverfow ответ, я думаю, что знаю, как его передать, например:
$schedule->command('crawler --sequence=1')
Но как я могу прочитать этот параметр в классе Command
? Является ли это просто регулярной переменной PHP, т.е. $sequence
?