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

