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

Метод onOneServer

Метод onOneServer применяется к объекту события планировщика и гарантирует, что задача будет выполнена только на одном экземпляре приложения в распределённой среде. Это особенно важно, когда несколько серверов обрабатывают задачи планировщика и необходимо избежать конфликтов или дублирования данных. Метод не принимает никаких параметров и возвращает тот же объект события для цепочки вызовов.

Синтаксис

<?php use Illuminate\Console\Scheduling\Schedule; $schedule->command($command) ->onOneServer(); ?>

Пример

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

<?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:send') ->daily() ->onOneServer(); } } ?>

В результате команда reports:send будет запускаться ежедневно, но только на одном сервере из кластера.

Пример

Теперь давайте запланируем фоновую задачу на выполнение каждую минуту с защитой от дублирования:

<?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->job(new ProcessPendingOrders) ->everyMinute() ->onOneServer(); } } ?>

Результат: задача ProcessPendingOrders будет выполняться каждую минуту только на одном сервере, что предотвращает повторную обработку одних и тех же заказов.

Пример

Рассмотрим более сложный пример с условиями выполнения и защитой от параллельных запусков:

<?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('backup:run') ->daily() ->between('23:00', '06:00') ->onOneServer() ->emailOutputTo('admin@example.com'); } } ?>

Команда backup:run будет выполняться ежедневно в период с 23:00 до 06:00 только на одном сервере, а результат выполнения будет отправлен по электронной почте.

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

  • метод withoutOverlapping,
    который предотвращает запуск задачи, если она уже выполняется
  • метод command,
    который планирует выполнение консольной команды
  • метод job,
    который планирует выполнение фонового задания
  • метод daily,
    который настраивает ежедневное выполнение задачи
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить