Laravel запускает несколько запланированных задач

В настоящее время у меня есть запланированная консольная команда, которая выполняется каждые 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 ?

Related of "Laravel запускает несколько запланированных задач"

  1. Лучше использовать очередь для обработки заданий
  2. на cron, добавить все задания в очередь
  3. Запуск нескольких сотрудников очереди, которые будут обрабатывать задания параллельно

Совет. Это случилось с нами. Может случиться, что ранее добавленная работа не завершена, но cron снова добавляет ту же задачу в очередь. Поскольку очереди работают последовательно. Чтобы спасти себя от ситуации, вы должны в теге базы данных, когда задача завершена в последний раз, поэтому вы знаете, когда выполнять задание (если оно было серьезно задержано)

Я нашел это в документации, я надеюсь, что это то, что вы ищете:

  • Получение ввода

Во время выполнения вашей команды вам, очевидно, потребуется получить доступ к значениям аргументов и параметров, принятых вашим приложением. Для этого вы можете использовать аргументы и методы опций:

  • Получение значения аргумента команды

$ value = $ this-> argument ('name');

  • Получение всех аргументов

$ arguments = $ this-> argument ();

  • Получение значения параметра команды

$ value = $ this-> option ('name');

  • Получение всех параметров

$ options = $ this-> option ();

источник