Tareas programadas en Laravel

Laravel cuenta con Task Scheduling para el trabajo de tareas programadas, con esta funcionalidad podemos automatizar nuestro proyecto para que haga una serie de funciones en el intervalo de tiempo que queramos.

En este artículo, vamos a aprender a automatizar nuestra aplicación Laravel con scheduling, para el uso de queue (aprende sobre queues en nuestro articulo: «Queues en Laravel«) en un hosting compartido con Cpanel (aprende a configurar tu aplicación laravel en un hosting con nuestro artículo: «Subir laravel a hosting«.

Creando la tarea programada

Nos vamos a dirigir en nuestro proyecto al archivo kernel.php que se encuentra en app/console/kernelp.php. Una vez aquí, nos vamos a dirigir a la función schedule y vamos a programar una tarea mediante el siguiente código:

protected function schedule(Schedule $schedule)
    {
        $schedule->command('queue:work --tries=3')
        ->cron('* * * * * ')
        ->withoutOverlapping();
    }

En el articulo de las queue, vimos que teníamos que tener corriendo en nuestra terminal el comando php artisan queue:work para ejecutar las colas que tenía pendiente. De esta forma se ejecutará solo, ya que le indicamos a nuestro hosting que queremos que ejecute este comando cada minuto.

Hecho esto, solo faltaría crear un cron en nuestro hosting.

Creando cron en Cpanel

Aunque en este ejemplo estemos trabajando con Cpanel, no es necesario tenerlo, ya que muchos hosting cuenta con otro panel de control en el que también es posible crear crons.

En nuestro panel de control, nos dirigimos a la opción «Trabajos con cron», aquí crearemos un cron que ejecutará cada minuto la función schedule:

/usr/local/bin/php /ruta-proyecto/artisan schedule:run >> /dev/null 2>&1

En el comando, en la parte «ruta proyecto», hace referencia a la ruta dónde está nuestro proyecto, dónde se encuentra un archivo llamado artisan. Si no tenemos clara la ruta de nuestro proyecto, podemos ir en nuestro panel de control de nuestro hosting y en el administrador de archivos, ver la ruta que sigue hasta nuestro proyecto:

En mi caso, cambiaría el comando anterior a este otro:

/usr/local/bin/php /home/user/miproyecto/artisan schedule:run >> /dev/null 2>&1

Y de esta forma tan sencilla, tendríamos creado nuestro cron creado, ejecutando la función schedule de nuestro proyecto Laravel.