В этом руководстве мы рассмотрим использование планировщика задач Laravel для выполнения Cron заданий. Вы получите детальное представление о том, как создавать и запускать Cron задачи в Laravel 8. Использование планировщика задач избавляет владельца сайта от необходимости ручного выполнения многих рутинных операций - например, рассылки уведомлений и обновлений по почте.
Управлять заданиями с помощью планировщика Laravel также гораздо проще, чем заходить через SSH на сервер для добавления или изменения Cron записей. Рассмотрим шаг за шагом, как работать с планировщиком в Laravel 8.
Установка Laravel 8
Если фреймворк Laravel 8 у вас еще не установлен - запускайте приведенную ниже команду для инсталляции и создания нового проекта:
composer create-project --prefer-dist laravel/laravel blog
Создание новой команды
Теперь мы создадим новую пользовательскую команду, которая будет исполнять Cron задачи планировщика. Выполните следующую команду:
php artisan make:command DemoCron --command=demo:cron
Теперь отредактируем командный файл – он называется DemoCron.php и располагается здесь - app/Console/Commands/DemoCron.php. Внесите в него следующий код:
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Log; class DemoCron extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'demo:cron'; /** * 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 int */ public function handle() { Log::info('Cron is working fine!'); } }
Настройка расписания планировщика
Для автоматического выполнения запланированных задач в определенное время необходимо внести соответствующие настройки в файл Kernel.php. Примеры настроек:
Теперь добавим настройки в файл, расположенный по адресу app/Console/Kernel.php:
<?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\DemoCron::class, ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { // $schedule->command('inspire')->hourly(); $schedule->command('demo:cron')->everyMinute(); } /** * Register the commands for the application. * * @return void */ protected function commands() { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } }
Тестовый запуск планировщика
Теперь мы готовы запустить планировщик Cron задач. Для этого выполните следующую команду:
php artisan schedule:run
После выполнения данной команды откройте лог-файл приложения, он располагается по адресу - storage/logs/laravel.log. В нем должен быть представлен отчет, похожий на этот:
[2021-08-20 06:52:23] local.INFO: Cron is working fine!
Если все в порядке, можно добавлять задание в файл crontab планировщика задач, размещенного на сервере. Для этого воспользуйтесь любой из приведенных ниже строк:
* * * * * php /path/to/artisan schedule:run 1 >> /dev/null 2>&1 или * * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1