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