Поиск…


Создание задачи

Вы можете создать задачу (Командная консоль) в Laravel с помощью Artisan. Из командной строки:

php artisan make:console MyTaskName

Это создает файл в app / Console / Commands / MyTaskName.php . Это будет выглядеть так:

<?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()
    {
        //
    }
}

Некоторые важные части этого определения:

  • Свойство $signature - это то, что идентифицирует вашу команду. Вы сможете выполнить эту команду позже через командную строку, используя Artisan, запустив php artisan command:name (where command:name соответствует $signature вашей команде)
  • Свойство $description является показателем помощи / использования Artisan рядом с вашей командой, когда он становится доступным.
  • Метод handle() - это то, где вы пишете код для своей команды.

В конце концов, ваша задача будет доступна для командной строки через Artisan. protected $signature = 'command:name'; свойство этого класса - это то, что вы использовали бы для его запуска.

Создание задачи

Вы можете сделать задачу доступной для Artisan и вашего приложения в файле app / Console / Kernel.php .

Класс Kernel содержит массив с именем $commands который делает ваши команды доступными для вашего приложения.

Добавьте свою команду в этот массив, чтобы сделать его доступным для Artisan и вашего приложения.

<?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)
    {
    
    }
}

Как только это будет сделано, вы можете теперь получить доступ к своей команде через командную строку, используя Artisan. Предполагая, что ваша команда имеет свойство $signature установленное в my:task , вы можете запустить следующую команду для выполнения своей задачи:

php artisan my:task

Планирование вашей задачи

Когда ваша команда станет доступной для вашего приложения, вы можете использовать Laravel, чтобы запланировать ее запуск с заранее определенными интервалами, как и CRON.

В файле app / Console / Kernel.php вы найдете метод schedule который вы можете использовать для планирования своей задачи.

<?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();
    }
}

Предполагая, что ваша $signature my:task - my:task вы можете запланировать ее, как показано выше, используя объект Schedule $schedule . Laravel предоставляет множество различных способов запланировать вашу команду, как показано в прокомментированных строках выше.

Настройка запуска планировщика

Планировщик можно запустить с помощью команды:

php artisan schedule:run

Планировщик должен запускаться каждую минуту, чтобы работать правильно. Вы можете установить это, создав задание cron со следующей строкой, которая запускает планировщик каждую минуту в фоновом режиме.

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow