Методы запуска расписания Laravel только в производственной среде

В Laravel функция расписания позволяет вам определять задачи, которые должны выполняться периодически. Однако вы можете ограничить выполнение запланированных задач только производственной средой. В этой статье мы рассмотрим различные методы достижения этой цели в Laravel, а также примеры кода.

Метод 1: условие на основе среды
Один простой подход — использовать условие на основе среды в определении расписания. Проверив текущую среду перед запуском задачи, вы можете убедиться, что она выполняется только в производственной среде.

// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    if (App::environment('production')) {
        $schedule->command('your:command')->daily();
    }
}

Метод 2: Условная регистрация задач
Вы можете условно зарегистрировать задачи в зависимости от среды, используя метод when. Этот метод принимает замыкание, которое определяет, следует ли планировать задачу или нет.

// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    $schedule->command('your:command')->daily()->when(function () {
        return App::environment('production');
    });
}

Метод 3: отдельный файл расписания
Другой подход заключается в создании отдельного файла расписания специально для производственной среды. Это позволяет вам определять и регистрировать задачи, которые следует запускать только в производственной среде.

// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    $this->loadProductionTasks($schedule);
}
protected function loadProductionTasks(Schedule $schedule)
{
    require base_path('routes/schedule.production.php');
}
// routes/schedule.production.php
$schedule->command('your:command')->daily();

Метод 4: Конфигурация для конкретной среды
Вы можете настроить частоту расписания и задачи в зависимости от среды, используя файл .env. Определите отдельную частоту и команду расписания для производственной среды и используйте функцию envв определении расписания.

// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    $schedule->command(env('SCHEDULE_COMMAND'))->{env('SCHEDULE_FREQUENCY')}()->evenInMaintenanceMode();
}
# .env
SCHEDULE_COMMAND=your:command
SCHEDULE_FREQUENCY=daily

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