Comandos propios en artisan y trabajos programados en Laravel

Es normal que en nuestros proyectos nos encontremos con la necesidad de crear ciertas tareas que no responden a ningún evento, sino que deben ser ejecutadas regularmente para el funcionamiento del sistema. Los casos más típicos pueden ser por ejemplo borrar notificaciones leídas por el usuario con ciertos días de antigüedad o el envío de emails a ciertos usuarios.

En cualquier caso, aunque podríamos crearnos un script independiente a Laravel para estas tareas, vamos a ver como utilizar el código desarrollado para nuestra aplicación y ejecutar estas tareas de mantenimiento mediante nuestro propio comando personalizado para trabajar con laravel mediante artisan.

Para esta entrada, vamos a crear un comando de ejemplo llamado maintenance, que por ejemplo borre las notificaciones leídas de los usuarios, con fecha de creación anterior a 3 días desde la fecha actual.

1) Desde el terminal, creamos el comando artisan

php artisan command:make maintenance

2) En la carpeta app/command tendremos un nuevo fichero. Dentro de este fichero, el método fire será el que utilicemos para definir que debe hacer el comando cuando se ejecute desde el terminal. Por ejemplo, para nuestro ejemplo básico podría ser el siguiente:

/**
 * Execute the console command.
 *
 * @return void
 */
 public function fire()
 {
 $this->info('Deleting all readed notifications');
 
 $hour_limit = new DateTime('now');
 $hour_limit->modify('-1 day');
$not = Notification::where('readed', '=', 1)
 ->where('created_at','<', $hour_limit)
 ->delete();
 
 $this->info('Deleting finished');
 }

3) En el fichero app/start/artisan.php, debemos añadir una entrada para que artisan reconozca el comando:

Artisan::add(new maintenance);

4) Podemos probar nuestro comando ejecutando

php artisan command:maintenance

 

5) Por último, añadimos una entrada en el cron del sistema con la siguiente orden

sudo crontab -e

Teniendo el siguiente esquema de configuración del cron del sistema:

cron

 

Añadimos una entrada según las necesidades que tengamos. Por ejemplo, imaginemos que queremos ejecutar el comando maintenance una vez al día, cada día de la semana a las 16:45 horas:

45 16 * * * php /var/www/project/artisan command:maintenance

y eso es todo 🙂

Enlace de la documentación de Laravel recomendado: http://laravel.com/docs/commands

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s