php - que - Laravel ejecuta mĂșltiples tareas programadas
variables en blade laravel (2)
Actualmente tengo un comando de consola programado que se ejecuta cada 5 minutos sin superposición como esta:
$schedule->command(''crawler'')
->everyFiveMinutes()
->withoutOverlapping()
->sendOutputTo(''../_laravel/storage/logs/scheduler-log.txt'');
Por lo tanto, funciona muy bien, pero actualmente tengo unas 220 páginas que tardan aproximadamente 3 horas en terminar en incrementos de 5 minutos porque simplemente lo obligo a rastrear 10 páginas en cada intervalo ya que cada página tarda entre 20 y 30 segundos en rastrearse debido a varias factores. Cada página es un registro en la base de datos. Si termino teniendo 10.000 páginas para rastrear, este método no funcionaría porque tomaría más de 24 horas y se supone que cada página se volverá a rastrear una vez al día.
Entonces, mi proveedor permite hasta 10 solicitudes simultáneas (o más con planes superiores), entonces, ¿cuál es la mejor manera de ejecutarlo al mismo tiempo? Si acabo de duplicar el código del planificador, ¿ejecuta el mismo comando dos veces o como 10 veces si lo duplico 10 veces? ¿Algún problema que pueda causar?
Y luego tengo que pasar los parámetros a la consola como 1, 2, 3, etc. ... en los que podría usar para determinar qué páginas rastrear? es decir, 1 sería 1-10 registros, 2 serían los siguientes 11-20 registros, y así sucesivamente.
Usando esta respuesta de StackOverfow , creo que sé cómo pasarla, así:
$schedule->command(''crawler --sequence=1'')
¿Pero cómo leo ese parámetro dentro de mi clase de Command
? ¿Se convierte en una variable regular de PHP, es decir, $sequence
?
- Es mejor utilizar la cola para el procesamiento de trabajos
- en cron, agregue todos los trabajos a la cola
- Ejecute varios trabajadores de cola, que procesarán trabajos en paralelo
Consejo: sucedió con nosotros. Puede suceder que el trabajo agregado previamente no esté completo, pero cron agrega la misma tarea nuevamente en la cola. Como las colas funcionan de forma secuencial. Para salvarse de la situación, debe marcar en la base de datos cuando se completa una tarea la última vez, para saber cuándo ejecutar el trabajo (si se retrasó seriamente)
Encontré esto en la documentación, espero que esto sea lo que estás buscando:
- Recuperando entrada
Mientras se ejecuta su comando, obviamente necesitará acceder a los valores de los argumentos y opciones aceptados por su aplicación. Para hacerlo, puede usar los métodos de argumento y opción:
- Recuperando el valor de un argumento de comando
$ value = $ this-> argument (''nombre'');
- Recuperando todos los argumentos
$ arguments = $ this-> argument ();
- Recuperando el valor de una opción de comando
$ value = $ this-> option (''name'');
- Recuperando todas las opciones
$ options = $ this-> option ();