Пример использования планировщика Laravel 8 для выполнения Cron заданий

В этом руководстве мы рассмотрим использование планировщика задач Laravel для выполнения Cron заданий. Вы получите детальное представление о том, как создавать и запускать Cron задачи в Laravel 8. Использование планировщика задач избавляет владельца сайта от необходимости ручного выполнения многих рутинных операций – например, рассылки уведомлений и обновлений по почте.

Управлять заданиями с помощью планировщика Laravel также гораздо проще, чем заходить через SHH на сервер для добавления или изменения Cron записей. Рассмотрим шаг за шагом, как работать с планировщиком в Laravel 8.

Шаг 1. Установка Laravel 8

Если фреймворк Laravel 8 у вас еще не установлен – запускайте приведенную ниже команду для инсталляции и создания нового проекта:

composer create-project --prefer-dist laravel/laravel blog

Шаг 2. Создание новой команды

Теперь мы создадим новую пользовательскую команду, которая будет исполнять 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;

   

class DemoCron extends Command

{

    /**

     * Название и подпись команды.

     *

     * @var string

     */

    protected $signature = 'demo:cron';

    

    /**

     * Описание консольной команды.

     *

     * @var string

     */

    protected $description = 'Command description';

    

    /**

     * Создание новой команды.

     *

     * @return void

     */

    public function __construct()

    {

        parent::__construct();

    }

    

    /**

     * Исполнение консольной команды.

     *

     * @return mixed

     */

    public function handle()

    {

        \Log::info("Cron is working fine!");

     

        /*

           Схема вашей базы данных

           Item::create(['name'=>'hello new']);

        */

    }

}

Шаг 3. Настройка расписания планировщика

Для автоматического выполнения запланированных задач в определенное время необходимо внести соответствующие настройки в файл Kernel.php. В таблице приведены примеры настроек.

->everyMinute();Запуск задания каждую минуту
->everyFiveMinutes();Запуск каждые пять минут
->everyTenMinutes();Исполнение задачи каждые 10 минут
->everyFifteenMinutes();Запуск задачи раз в 15 минут
->everyThirtyMinutes();Исполнение задания каждые 30 минут
->hourly();Запуск задачи каждый час
->hourlyAt(17);Выполнение задания каждый час на 17-й минуте
->daily();Исполнение задачи ежедневно в полночь
->dailyAt(’13:00′);Выполнение задания каждый день в 13:00
->twiceDaily(1, 13);Запуск задачи каждый день в 1:00 и в 13:00
->weekly();Исполнение задачи раз в неделю
->weeklyOn(1, ‘8:00’);Запуск задачи каждую неделю во вторник в 8:00
->monthly();Исполнение задачи раз в месяц
->monthlyOn(4, ’15:00′);Запуск задачи каждый месяц, 4-го числа в 15:00
->quarterly();Запуск задания раз в квартал
->yearly();Исполнение задачи раз в год
->timezone(‘America/New_York’);Установка временной зоны

Теперь добавим настройки в файл, расположенный по адресу

app/Console/Kernel.php:

<?php

   

namespace App\Console;

    

use Illuminate\Console\Scheduling\Schedule;

use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

    

class Kernel extends ConsoleKernel

{

    /**

     * Команды Artisan, предоставленные вашим приложением.

     *

     * @var array

     */

    protected $commands = [

        Commands\DemoCron::class,

    ];

     

    /**

     * Определение расписания выполнения команд.

     *

     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule

     * @return void

     */

    protected function schedule(Schedule $schedule)

    {

        $schedule->command('demo:cron')

                 ->everyMinute();

    }

     

    /**

     * Регистрация команд приложения.

     *

     * @return void

     */

    protected function commands()

    {

        $this->load(__DIR__.'/Commands');

     

        require base_path('routes/console.php');

    }

}

Шаг 4. Тестовый запуск планировщика

Теперь мы готовы запустить планировщик Cron задач. Для этого выполните следующую команду:

php artisan schedule:run

После выполнения данной команды откройте лог-файл приложения, он располагается по адресу – storage/logs/laravel.php. В нем должен быть представлен отчет, похожий на этот:

[2019-04-24 03:46:42] local.INFO: Cron is working fine!  

[2019-04-24 03:46:52] local.INFO: Cron is working fine!  

[2019-04-24 03:46:55] 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

Надеюсь, статья вам пригодилась. Посмотрите еще один полезный урок по авторизации через Google аккаунт в Laravel 8.

Дайте знать, что вы думаете по данной теме в комментариях. Мы крайне благодарны вам за ваши комментарии, подписки, дизлайки, лайки, отклики!

Наталья Кайдаавтор-переводчик статьи «Laravel 8 Cron Job Task Scheduling Tutorial»