Команда schedule:run
Команда schedule:run является основным инструментом для выполнения задач, запланированных через планировщик Laravel. Она анализирует все задачи, определённые в классе App\Console\Kernel в методе schedule, определяет, какие из них должны быть запущены в текущий момент, и выполняет их. Обычно эта команда добавляется в системный cron для выполнения каждую минуту, чтобы обеспечивать своевременный запуск всех запланированных задач.
Синтаксис
php artisan schedule:run
Команда не принимает аргументов. При её вызове планировщик проверяет все зарегистрированные задачи и выполняет те, у которых время совпадает с текущим.
Пример
Давайте определим несколько задач в планировщике и запустим их с помощью schedule:run.
В файле планировщика добавим простую команду, которая записывает сообщение в лог каждую минуту, а также ежеминутную замыкающую функцию:
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\Log;
class Kernel extends ConsoleKernel
{
protected function schedule(Schedule $schedule)
{
$schedule->command('inspire')->everyMinute();
$schedule->call(function () {
Log::info('Задача выполняется каждую минуту');
})->everyMinute();
}
}
?>
Теперь запустим планировщик с помощью команды schedule:run⁅/⁆:
php artisan schedule:run
Результат выполнения команды:
"Running scheduled task: 'Inspire'..."
"Running scheduled task: Closure..."
Пример
Теперь давайте создадим собственную консольную команду и запланируем её выполнение раз в час:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class ProcessReports extends Command
{
protected $signature = 'reports:process';
protected $description = 'Process daily reports';
public function handle()
{
$this->info('Processing reports...');
// Здесь обычно находится логика обработки отчётов
$this->info('Reports processed successfully.');
return 0;
}
}
?>
Добавим эту команду в планировщик для выполнения каждый час:
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
protected function schedule(Schedule $schedule)
{
$schedule->command('reports:process')->hourly();
}
}
?>
При запуске в указанный час планировщик выполнит нашу команду:
php artisan schedule:run
Результат выполнения команды:
"Running scheduled task: 'reports:process'..."
"Processing reports..."
"Reports processed successfully."
Смотрите также
-
команда
schedule:work,
которая запускает планировщик как демон для непрерывной работы -
команда
schedule:list,
которая показывает список всех запланированных задач -
класс
Schedule,
который предоставляет API для определения задач в планировщике -
метод
command,
который используется для планирования выполнения консольной команды