РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1340 of 1392 menu

Класс Schedule

Класс Schedule используется для определения запланированных задач в приложении Laravel. Он доступен через фасад Schedule или внедрение зависимости в консольном ядре. Класс предоставляет методы для регистрации Artisan-команд, вызовов замыканий и запуска очередей с указанием периодичности выполнения. Все задачи определяются в методе schedule класса AppConsoleKernel.

Базовое использование

Для создания запланированной задачи используется метод command, который принимает имя Artisan-команды:

<?php namespace AppConsole; use IlluminateConsoleSchedulingSchedule; use IlluminateFoundationConsoleKernel as ConsoleKernel; class Kernel extends ConsoleKernel { protected function schedule(Schedule $schedule) { $schedule->command('cache:clear')->daily(); } } ?>

Метод command

Метод command используется для регистрации Artisan-команды в расписании. Первым параметром передаётся имя команды, вторым необязательным - массив аргументов:

<?php namespace AppConsole; use IlluminateConsoleSchedulingSchedule; use IlluminateFoundationConsoleKernel as ConsoleKernel; class Kernel extends ConsoleKernel { protected function schedule(Schedule $schedule) { $schedule->command('mail:send', ['--force'])->daily(); } } ?>

Метод call

Метод call позволяет выполнять произвольное замыкание по расписанию:

<?php namespace AppConsole; use IlluminateConsoleSchedulingSchedule; use IlluminateFoundationConsoleKernel as ConsoleKernel; use IlluminateSupportFacadesLog; class Kernel extends ConsoleKernel { protected function schedule(Schedule $schedule) { $schedule->call(function () { Log::info('Scheduled task executed'); })->hourly(); } } ?>

Метод job

Метод job используется для постановки задания очереди по расписанию:

<?php namespace AppConsole; use AppJobsProcessPendingOrders; use IlluminateConsoleSchedulingSchedule; use IlluminateFoundationConsoleKernel as ConsoleKernel; class Kernel extends ConsoleKernel { protected function schedule(Schedule $schedule) { $schedule->job(new ProcessPendingOrders)->everyFiveMinutes(); } } ?>

Периодичность выполнения

Класс Schedule предоставляет множество методов для настройки частоты выполнения задач. Рассмотрим основные из них:

<?php namespace AppConsole; use IlluminateConsoleSchedulingSchedule; use IlluminateFoundationConsoleKernel as ConsoleKernel; class Kernel extends ConsoleKernel { protected function schedule(Schedule $schedule) { $schedule->command('backup:run')->everyMinute(); $schedule->command('reports:generate')->daily(); $schedule->command('queue:prune')->weekly(); $schedule->command('logs:clean')->monthly(); } } ?>

Пример с cron-выражением

Для гибкой настройки расписания можно использовать метод cron с произвольным cron-выражением:

<?php namespace AppConsole; use IlluminateConsoleSchedulingSchedule; use IlluminateFoundationConsoleKernel as ConsoleKernel; class Kernel extends ConsoleKernel { protected function schedule(Schedule $schedule) { $schedule->command('analytics:collect')->cron('0 */3 * * *'); } } ?>

Ограничение перекрытия

Метод withoutOverlapping предотвращает запуск задачи, если предыдущий экземпляр всё ещё выполняется:

<?php namespace AppConsole; use IlluminateConsoleSchedulingSchedule; use IlluminateFoundationConsoleKernel as ConsoleKernel; class Kernel extends ConsoleKernel { protected function schedule(Schedule $schedule) { $schedule->command('import:data') ->everyMinute() ->withoutOverlapping(); } } ?>

Условия выполнения

Метод environments позволяет ограничить выполнение задачи определённой средой:

<?php namespace AppConsole; use IlluminateConsoleSchedulingSchedule; use IlluminateFoundationConsoleKernel as ConsoleKernel; class Kernel extends ConsoleKernel { protected function schedule(Schedule $schedule) { $schedule->command('db:seed') ->daily() ->environments('local', 'staging'); } } ?>

Запуск расписания

Для выполнения запланированных задач используется команда schedule:run. Её следует добавить в системный cron с периодичностью каждую минуту:

"* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1"

Полный пример

Давайте рассмотрим полный пример консольного ядра с несколькими запланированными задачами:

<?php namespace AppConsole; use AppJobsCleanupTempFiles; use IlluminateConsoleSchedulingSchedule; use IlluminateFoundationConsoleKernel as ConsoleKernel; use IlluminateSupportFacadesLog; class Kernel extends ConsoleKernel { protected function schedule(Schedule $schedule) { $schedule->command('backup:database') ->daily() ->environments('production'); $schedule->call(function () { $users = User::where('active', false)->delete(); Log::info('Inactive users deleted'); })->weekly(); $schedule->job(new CleanupTempFiles) ->hourly() ->withoutOverlapping(); $schedule->command('reports:generate') ->cron('0 2 * * 1') ->timezone('Europe/Moscow'); } } ?>

Смотрите также

  • класс Command,
    который используется для создания пользовательских команд
  • метод handle,
    который содержит логику выполнения команды
  • команда schedule:run,
    которая запускает все запланированные задачи
  • команда schedule:list,
    которая показывает все зарегистрированные задачи
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить