Posted in

Cronjob en Laravel (crontab)

Paso 1, crear un comando

php artisan command:make WeeklyUpdates

Se generará el archivo WeeklyUpdates.php en /app/commands

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class WeeklyUpdates extends Command {

        protected $name = 'command:name';
        protected $description = 'Command description.';

        public function __construct() {
                parent::__construct();
        }

        public function fire(){

        }

        protected function getArguments() {
            return array(
                array('example', InputArgument::REQUIRED, 'An example argument.'),
            );
        }

        protected function getOptions() {
            return array(
                array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null),
            );
        }

}

Paso 2, edición simple del archivo WeeklyUpdates.php

Cambiamos la línea

protected $name = 'command:name';

por algo así

protected $name = 'command:WeeklyUpdates';

Si no necesitamos argumentos dejamos la función getArguments() así

protected function getArguments() {
      return array();
}

El cronjob ejecutará el código de la función fire(), así que deberemos incluir todo nuestro código dentro de ella.

public function fire(){
    echo "Hello world";    
}

Paso 3, registramos el comando
Abrimos el archivo app/start/artisan.php y incluimos la siguiente linea

Artisan::add(new WeeklyUpdates);

*Podemos probar nuestro comando ejecutándolo, en el caso de que tengamos el echo “hello world” en la función fire(), eso será lo que nos imprimirá en pantalla. Lo haremos de la siguiente manera:

php artisan command:WeeklyUpdates

Paso 4, creamos la tarea programada

crontab -e

Ya añadimos la línea que llamará a nuestro comando pasándole el momento que escojamos

*/30 * * * * php path_laravel_project/artisan command:WeeklyUpdates

* en este ejemplo se llamará al comando cada 30 minutos

¡Importante!
Si nos devuelve un error (E486: Pattern not found) al introducir la línea anterior, este problema es debido a que tenemos asociado VIM como editor por defecto, así que podemos crear un alias en nuestro .bashrc para ejecutar directamente la edición del crontab pero desde Nano. Haremos lo siguiente:

alias crontabedit='sudo EDITOR=nano crontab -e'

De esta forma solo habrá que escribir crontabedit en nuestro terminal para la edición del archivo crontab

Tabla para configurar el momento en el que queremos que se haga la llamada, en Amazon Linux no añadiremos la última opción (year)

     *    *    *    *    *    *
    -    -    -    -    -    -
    |    |    |    |    |    |
    |    |    |    |    |    + year [optional]
    |    |    |    |    +----- day of week (0 - 7) (Sunday=0 or 7)
    |    |    |    +---------- month (1 - 12)
    |    |    +--------------- day of month (1 - 31)
    |    +-------------------- hour (0 - 23)
    +------------------------- min (0 - 59)

* más info

Se puede dar la posibilidad que al cambiar el cron el sistema siga con el ciclo anterior y no se tengan en cuenta los cambios, así que es recomendable reiniciar el cron.

Reinicio en Linux Amazon o CentOS

sudo /etc/init.d/crond reload

Reinicio en CentOS 7

sudo systemctl start crond.service

Podemos revisar el log del cron

sudo tail -f /var/log/cron

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *


The reCAPTCHA verification period has expired. Please reload the page.