Header Ads Widget

Ticker

6/recent/ticker-posts

Programación de comandos y tareas en Laravel

 Programación de comandos y tareas en Laravel


A partir de Laravel 5, hay una gran característica que le permite configurar tareas y comandos automatizados en su aplicación Laravel. Esto supone que está ejecutando la aplicación en un servidor con sabor * nix, ya que esta técnica emplea la capacidad de controlar trabajos cron a través de PHP. Sin embargo, probablemente sería una apuesta segura que si está utilizando Laravel, es casi seguro que esté ejecutando en una plataforma Linux . Lo más probable es que sea Ubuntu, ya que esto es lo que viene con el gran Laravel Homestead. Los trabajos cron a menudo han sido un poco molestos, veamos cómo Laravel puede ayudarnos con su funcionalidad de Programador.


Definir el programa de comandos de la aplicación

Si buscamos la clase Kernel que es parte del directorio de la Consola, encontraremos la función protegida schedule().
Definir el programa de comandos de aplicaciones

Entonces, ¿qué te ofrece esto? Bueno, esencialmente, esta es una nueva forma de envolver sus trabajos cron. Con eso, queremos decir que este nuevo comando es esencialmente un envoltorio de los trabajos cron de Linux para que pueda definir trabajos o tareas recurrentes para que se activen directamente dentro de su aplicación. Memorizar todos los diferentes formatos de sintaxis es algo complicado, así que ahora puedes hacerlo con una sintaxis más amigable. Por ejemplo, en esta tabla a continuación, tenemos algunos trabajos cron de ejemplo comunes y cómo podemos ejecutarlos con su sintaxis asociada en Laravel.

* * * * * *cada minuto()
*/5 * * * * *everyFiveMinutes ()
*/10 * * * * *everyTenMinutes ()
0,30 * * * * *everyThirtyMinutes ()
0 * * * * *cada hora()
0 0 * * * *diario()
0 0 * * 0 *semanal()
0 0 1 * * *mensual()
0 0 1 */3 *trimestral()
0 0 1 1 * *anual()

Puede hacer cosas simples como limpiar su base de datos, informes por correo electrónico o incluso podría ganar $ 4 millones de dólares por año con un trabajo cron. Use su imaginación para ver a qué se podría imaginar aplicando un trabajo cron. Como podemos ver en la tabla anterior, es más fácil recordar los nombres de los métodos basados ​​en texto que memorizar la sintaxis de los trabajos cron, que es un poco críptico. Puede ser más granular que las opciones enumeradas aquí, pero en la mayoría de los casos, estas opciones deberían ser más que suficientes para cubrir cualquier cosa que le gustaría hacer con un trabajo cron.


Echando un vistazo más de cerca al horario ()

comandos artesanales

En este fragmento, podemos ver que la schedule()función acepta una instancia de tipo sugerida de la Scheduleclase. Luego, en el cuerpo de la schedule()función, podemos definir un horario para disparar comandos artesanales . El comando anterior está comentado de forma predeterminada cuando Laravel se instala por primera vez. Si lo descomentamos, como hicimos anteriormente, se convierte en el equivalente a ejecutarse php artisan inspireen la línea de comandos cada hora.

comandos de terminal de linux

Además de ejecutar comandos artesanales, puede ejecutar comandos de terminal usando exec()Aquí enumeraremos el contenido de un directorio y enviaremos esa salida a un archivo de texto.


Configurar el programador

Para hacer uso de esta agradable sintaxis para trabajos cron que nos proporciona Laravel, necesitamos configurar manualmente un trabajo cron en el servidor nosotros mismos. La forma en que esto funciona es que presionas un comando artesanal cada minuto. Cada vez que se ejecuta este comando, Laravel comprueba si hay algún comando que deba ejecutarse y, de ser así, se encarga de él. Entonces, básicamente, Laravel está verificando que los comandos se activen cada minuto, y cuando es necesario, ejecuta cualquier comando en la cola, por así decirlo. Así que escribimos un trabajo cron, luego tenemos la flexibilidad de definir nuestras tareas y comandos programados como queramos. Aquí está el trabajo cron para configurar, tenga en cuenta que / path / to / artisan debe actualizarse con su propia configuración de entorno.

Si desea probar esto en su servidor local, como homestead, solo para ver cómo funciona, podemos hacerlo. Si bien configurar trabajos cron en una máquina virtual que destruye y reconstruye en un entorno de prueba no logrará mucho para usted, tiene mucho sentido para usted probar cómo funciona esto antes de intentar arruinar la configuración de su servidor de producción.

vagrant @ homestead: ~ / Código / lpg $ crontab -e

Puede obtener un resultado similar al que ve aquí.

Si se le pregunta qué editor de texto usar, elegimos nano, por lo que también puede elegir esa opción. Luego, todo lo que necesita hacer es pegar ese cron que mencionamos anteriormente en el archivo y guardarlo. Ahora, primero debe encontrar el directorio de trabajo actual de donde vive el artesano para su proyecto, y esto será lo que pegue en el archivo cron. Nuestro pequeño proyecto de prueba vive en un directorio llamado lpg. Así que ssh en nuestra caja de vagabundos, y luego cd en Code / lpg. Aquí ejecutamos pwd y se nos proporciona la ruta de /home/vagrant/Code/lpg¡No olvides añadir artesano a este camino! Aquí está el trabajo cron original y actualizado que configuraremos.

original

actualizado

Ahora, ejecutamos crontab - enuevamente, ingresamos la cadena anterior como la última línea del archivo y guardamos.

Todo debería estar funcionando en este punto, y ahora podemos probar algunos comandos reales y ver si funcionan. Este primero enumerará el contenido de nuestro directorio laravel y lo guardará en un archivo llamado Listing.txt.

En el fragmento anterior, podemos conectarnos directamente al servidor y ejecutar un comando como si estuviéramos en la terminal. Primero, pasamos el comando que queremos ejecutar como una cadena a exec (). Observe que pasamos cd ~/Code/lpg && lsEsto dice, vamos a cambiar al directorio lpg, y una vez que estemos allí también ejecutamos un lscomando. El siguiente método le dice a Laravel que haga esto cada minuto. Además de esto, queremos enviar la salida de este comando a un archivo. Necesitamos proporcionar la ruta a la ubicación donde queremos almacenar la salida de nuestro comando. Pasaremos lo que equivale al mismo directorio exacto y colocaremos la salida en un archivo llamado listing.txt.

Si esperamos un par de minutos para asegurarnos de que le damos al cron la oportunidad de ejecutarse, podemos verificar si nuestro comando funcionó. Navegamos a nuestro directorio de laravel en la terminal y ejecutamos el comando cat listing.txtHe aquí que funcionó! Podemos ver que el contenido de nuestro directorio laravel está incluido en el archivo que especificamos.

vagrant @ homestead: ~ / Code / lpg $ cat listing.txt
app
artisan
bootstrap
composer.json
composer.lock
config
database
gulpfile.js
_ide_helper.php
Listing.txt
package.json
phpunit.xml
public
readme.md
resources
server.php
almacenamiento
pruebas
proveedor

Así que está muy bien, lo pusimos en marcha y eso es lo principal. En este punto, puede probar todos los diferentes métodos disponibles para ver cómo funcionan. Una vez que los desarrolle localmente, se sentirá más seguro al poner las cosas en un servidor en vivo.


¿Cómo ocurre esta magia?

El proceso de planificación de tareas en laravel está a cargo de los archivos tales como Kernel.phpSchedule.phpEvent.phpScheduleRunCommand.phpScheduleServiceProvider.phpComienza en la clase Schedule y también con el método de comando.

Cuando escribe algo como $ horario-> comando ('inspirar') -> hora (); - está haciendo uso de lo que equivale a un envoltorio alrededor de un método exec () general donde puede ejecutar cualquier tipo de comando de terminal. Si echamos un vistazo a dónde está definido ese método, veremos que estamos actualizando una matriz. Agregamos un nuevo elemento a una matriz de eventos en el objeto Schedule mediante una nueva instancia de la clase Event. Si agrega 5 comandos nuevos, la matriz ahora tiene 5 elementos esperando ser procesados.

Al observar el comando que se ejecuta cada minuto, podemos investigar lo que está sucediendo. En la clase ScheduleRunCommand.php hay un método fire () que recupera los eventos que están listos para ser disparados. Luego, recorremos cada uno de ellos y ejecutamos el evento.

Podemos ver que el método isDue () en la clase Schedule usa array_filter () para examinar la matriz de eventos que se ha llenado y devuelve solo los que vencen. Puede haber 5 o 10 en la matriz, pero solo se activarán los que vencen.

Laravel hace uso de un paquete de terceros para inspeccionar los eventos y determinar si se deben. Podemos ver eso en este código aquí.


Programación de comandos y tareas en Laravel Resumen

Hay un poco más de lo que hemos cubierto hasta ahora, pero sin duda es suficiente para ser peligroso con el Programador. En última instancia, la conclusión es que podemos construir fácilmente una matriz para realizar eventos que se dispararán. Esto funciona casi como una cola. Luego, Laravel evalúa esa matriz y dispara los eventos a su debido tiempo. La API es muy fácil de usar y te sorprenderá lo agradable que es de usar una vez que te acostumbres. Como todos los demás tutoriales, continúe jugando con los distintos comandos disponibles hasta que le resulten fáciles y familiares.

Publicar un comentario

0 Comentarios