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 el php artisan command:name (donde command: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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow