Buscar..
Creando una tarea
Puedes crear una tarea (comando de consola) en Laravel usando Artisan. Desde su línea de comando:
php artisan make:console MyTaskName
Esto crea el archivo en app / Console / Commands / MyTaskName.php . Se verá así:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class MyTaskName extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'command:name';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//
}
}
Algunas partes importantes de esta definición son:
- La propiedad
$signature
es lo que identifica su comando. Podrá ejecutar este comando más adelante a través de la línea de comandos utilizando Artisan ejecutando elphp artisan command:name
(dondecommand:name
coincide con la$signature
su comando) - La propiedad
$description
es la ayuda / uso de Artisan al lado de su comando cuando está disponible. - El método
handle()
es donde escribes el código para tu comando.
Eventualmente, su tarea se pondrá a disposición de la línea de comandos a través de Artisan. El protected $signature = 'command:name';
la propiedad en esta clase es lo que usaría para ejecutarla.
Haciendo una tarea disponible
Puede hacer que una tarea esté disponible para Artisan y para su aplicación en el archivo app / Console / Kernel.php .
La clase Kernel
contiene una matriz llamada $commands
que hace que sus comandos estén disponibles para su aplicación.
Agregue su comando a esta matriz, para que esté disponible para Artisan y su aplicación.
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
Commands\Inspire::class,
Commands\MyTaskName::class // This line makes MyTaskName available
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
}
}
Una vez hecho esto, ahora puede acceder a su comando a través de la línea de comandos, utilizando Artisan. Suponiendo que su comando tiene la propiedad $signature
establecida en my:task
puede ejecutar el siguiente comando para ejecutar su tarea:
php artisan my:task
Programando tu tarea
Cuando su comando esté disponible para su aplicación, puede usar Laravel para programarlo para que se ejecute en intervalos predefinidos, como lo haría con un CRON.
En el archivo App / Console / Kernel.php encontrará un método de schedule
que puede utilizar para programar su tarea.
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
Commands\Inspire::class,
Commands\MyTaskName::class
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('my:task')->everyMinute();
// $schedule->command('my:task')->everyFiveMinutes();
// $schedule->command('my:task')->daily();
// $schedule->command('my:task')->monthly();
// $schedule->command('my:task')->sundays();
}
}
Suponiendo que la $signature
su tarea es my:task
que puede programar como se muestra arriba, usando el objeto Schedule $schedule
. Laravel proporciona muchas formas diferentes de programar su comando, como se muestra en las líneas comentadas arriba.
Configuración del planificador para ejecutar
El planificador se puede ejecutar usando el comando:
php artisan schedule:run
El programador debe ejecutarse cada minuto para que funcione correctamente. Puede configurarlo creando un trabajo cron con la siguiente línea, que ejecuta el programador cada minuto en segundo plano.
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1