Programación de tareas en Laravel

En este artículo, veremos una de las características interesantes de la programación de tareas y marcos web de Laravel. A lo largo de este artículo, veremos cómo Laravel le permite administrar las tareas programadas en su aplicación. Además, también terminaremos creando nuestras propias tareas programadas personalizadas para fines de demostración..

El marco Laravel te permite configurar tareas programadas para que no tengas que preocuparte por configurarlas a nivel del sistema. Puede deshacerse de esa compleja sintaxis cron al configurar tareas programadas ya que Laravel le permite definirlas de una manera fácil para el usuario.

Comenzaremos el artículo sobre cómo está acostumbrado a configurar los trabajos cron tradicionales y, a continuación, exploraremos la forma de Laravel de lograrlo. En la segunda mitad del artículo, lo intentaremos creando un par de tareas programadas personalizadas que deberían proporcionar una visión práctica del tema..

Configuración tradicional de tareas programadas

En el desarrollo diario de su aplicación, a menudo se enfrenta a una situación que requiere que ejecute ciertos scripts o comandos periódicamente. Si está trabajando con el sistema * nix, es probable que sepa que los trabajos cron manejan estos comandos. Por otro lado, se conocen como tareas programadas en sistemas basados ​​en Windows.

Echemos un vistazo rápido a un ejemplo simple del trabajo cron basado en * nix.

* / 5 * * * * /web/statistics.sh

Bastante simple-ejecuta el estadísticas.sh archivar cada cinco minutos!

Aunque ese fue un caso de uso bastante simple, a menudo te encuentras en una situación que requiere que implementes casos de uso más complejos. Por otro lado, un sistema complejo requiere que defina varios trabajos cron que se ejecutan en diferentes intervalos de tiempo.

Veamos algunas tareas que una aplicación web compleja debe realizar periódicamente en el back-end.

  • Limpie los datos innecesarios del back-end de la base de datos.
  • Actualice los índices de almacenamiento en caché front-end para mantenerlo actualizado.
  • Calcular las estadísticas del sitio.
  • Enviar correos electrónicos.
  • Copia de seguridad de diferentes elementos del sitio.
  • Generar informes.
  • Y más.

Entonces, como puede ver, hay muchas cosas por ahí esperando para ejecutarse periódicamente y también en diferentes intervalos de tiempo. Si usted es un administrador de sistemas experimentado, es una tarea fácil para usted definir los trabajos cron para todas estas tareas, pero a veces nosotros, como desarrolladores, deseamos que haya una manera más fácil de evitar.

Por suerte, Laravel viene con una función incorporada. Programación de tareas API que te permite definir tareas programadas como nunca antes. Y sí, la siguiente sección tiene que ver con eso: lo básico de la programación de tareas de Laravel.

El Camino Laravel

En la sección anterior, pasamos por la forma tradicional de configurar trabajos cron. En esta sección, veremos los detalles de Laravel en el contexto de la API de programación de tareas.

Antes de seguir adelante, lo importante es comprender que la función de programación provista por Laravel es como cualquier otra función y no se invocará automáticamente. Entonces, si estás pensando que no necesitas hacer nada a nivel del sistema, entonces no tienes suerte, diría.

De hecho, lo primero que debe hacer si desea utilizar el sistema de programación Laravel es configurar el trabajo cron que se ejecuta cada minuto y llama al comando de artesano que se muestra en el siguiente fragmento de código..

* * * * * php / path-to-your-project / artisan schedule: ejecuta >> / dev / null 2> & 1

El comando artesanal anterior llama al programador Laravel, y eso a su vez ejecuta todos los trabajos cron pendientes definidos en su aplicación.

Por supuesto, todavía no hemos visto cómo definir las tareas programadas en su aplicación Laravel, y eso es lo siguiente en lo que nos sumergiremos..

Es el programar método de la App \ Console \ Kernel clase que necesita utilizar si desea definir tareas programadas específicas de la aplicación.

Sigue adelante y agarra el contenido de la app / Console / Kernel.php expediente.

comando ('inspire') -> hourly (); 

Como puede ver, el código del núcleo en sí proporciona un ejemplo útil. En el ejemplo anterior, Laravel ejecuta el inspirar Comando artesanal por hora. ¿No crees que la sintaxis es tan intuitiva en primer lugar??

De hecho, hay un par de formas diferentes en las que Laravel le permite definir tareas de programación:

  • Utilice el cierre / callable.
  • Llama al comando artesano..
  • Ejecuta el comando shell.

Además, hay muchas frecuencias de programación integradas que puedes elegir:

  • cada minuto / cada cinco minutos
  • por hora / diario / semanal / trimestral / anual
  • a una hora específica del día
  • y muchos más

De hecho, diría que proporciona un conjunto completo de rutinas para que nunca tenga que tocar el shell para crear sus trabajos cron personalizados.!

Sí, puedo decir que está ansioso por saber cómo implementar sus tareas programadas personalizadas, y eso es lo que también prometí al principio del artículo.

Crea tu primera tarea programada en Laravel

Como comentamos, hay diferentes maneras en que Laravel le permite definir tareas programadas. Revisemos cada uno para entender cómo funciona..

El método de cierre / callable

La API de programación proporciona la llamada Método que le permite ejecutar una función invocable o de cierre. Revisemos el app / Console / Kernel.php archivo con el siguiente código.

call (function () $ posts = DB :: table ('posts') -> select ('user_id', DB :: raw ('count (*) as total_posts')) -> groupBy ('user_id') - > get (); foreach ($ publica como $ post) DB :: table ('users_statistics') -> where ('user_id', $ post-> user_id) -> update (['total_posts' => $ post- > total_posts]);) -> everyThirtyMinutes (); 

Como puede ver, hemos pasado la función de cierre como el primer argumento de llamada método. Además, hemos establecido la frecuencia a cada 30 minutos, por lo que ejecutará la función de cierre cada 30 minutos.!

En nuestro ejemplo, contamos el total de publicaciones por usuario y actualizamos la tabla de estadísticas en consecuencia.

El Comando Artesano

Además de los cierres o reclamaciones, también puede programar un comando artesanal que se ejecutará en ciertos intervalos. De hecho, ese debería ser el enfoque preferido sobre los cierres, ya que proporciona una mejor organización de los códigos y reutilización al mismo tiempo..

Anímate y revisa los contenidos de la app / Console / Kernel.php archivo con el siguiente.

comando ('estadísticas: usuario') -> everyThirtyMinutes ();  / ** * Registre los comandos basados ​​en el cierre para la aplicación. * * @return void * / protected function command () require base_path ('route / console.php'); 

Es el mando método que le gustaría usar si desea programar un comando artesanal como se muestra en el fragmento de código anterior. Debe pasar la firma del comando artesanal como el primer argumento del mando método.

Por supuesto, también debe definir el comando artesanal correspondiente en app / Console / Commands / UserStatistics.php.

select ('user_id', DB :: raw ('count (*) as total_posts')) -> groupBy ('user_id') -> get (); // actualizar la tabla de estadísticas para cada ($ publicaciones como $ publicaciones) DB :: table ('users_statistics') -> where ('user_id', $ post-> user_id) -> update (['total_posts' => $ post- > total_posts]); 

El comando exec

Podríamos decir que los métodos que hemos analizado hasta ahora eran específicos de la aplicación Laravel. Además, Laravel también le permite programar los comandos de shell para que también pueda ejecutar aplicaciones externas.

Veamos un ejemplo rápido que muestra cómo realizar una copia de seguridad de su base de datos todos los días..

exec ("mysqldump -h $ host -u $ username -p $ password $ database") -> daily () -> sendOutputTo ('/ backups / daily_backup.sql'); 

Es evidente a partir del código que necesita utilizar el exec método del planificador, y debe pasar el comando que desea ejecutar como su primer argumento.

Aparte de eso, también hemos usado el enviar salida Método que te permite recopilar la salida del comando. Por otro lado, hay un método., emailOutputTo, que le permite enviar por correo electrónico los contenidos de salida!

Y eso nos lleva al final del artículo. De hecho, solo hemos arañado la superficie de la API de programación de Laravel, y tiene mucho que ofrecer en su kitty..

Conclusión

Hoy pasamos por la API de programación de tareas en el marco web de Laravel. Fue fascinante ver con qué facilidad le permite administrar las tareas que deben ejecutarse periódicamente.

Al principio del artículo, discutimos la forma tradicional de configurar las tareas programadas y, a continuación, presentamos la forma Laravel de hacerlo. En la segunda mitad del artículo, analizamos un par de ejemplos prácticos para demostrar los conceptos de programación de tareas..

Espero que hayas disfrutado el artículo y que te sientas más seguro al configurar las tareas programadas en Laravel. Para aquellos de ustedes que ya están comenzando con Laravel o que desean ampliar sus conocimientos, sitio o aplicación con extensiones, tenemos una variedad de cosas que puede estudiar en Envato Market..

En caso de que aparezca algo en tu mente, comencemos una conversación utilizando la siguiente información!