Запуск нескольких расписаний в Laravel (октябрь) - PullRequest
1 голос
/ 10 октября 2019

У меня есть эти графики для выполнения

public function registerSchedule($schedule)
{
  $schedule->call('Corymillz\Adverts\Component\PaidBoost@onPaidBoostMsb')
           ->everyMinute();
  $schedule->call('Corymillz\Adverts\Component\PaidBoost@onPaidBoostMbb')
           ->cron('0 */12 * * *');
  $schedule->call('Corymillz\Adverts\Component\PaidBoost@onPaidBoostMeb')
           ->cron('0 */6 * * *');
  $schedule->call('Corymillz\Adverts\Component\PaidBoost@onPaidBoostBmsb')
           ->daily();
  $schedule->call('Corymillz\Adverts\Component\PaidBoost@onPaidBoostBmbb')
           ->cron('0 */12 * * *');
  $schedule->call('Corymillz\Adverts\Component\PaidBoost@onPaidBoostBmeb')
           ->cron('0 */6 * * *');
}

Когда я запускаю

php artisan schedule:run

, кажется, что выполняется только первое расписание, потому что оно показывает

Запланированная команда: Corymillz \ Adverts \ Component \ PaidBoost @ onPaidBoostMsb

Я на локальном хосте, это так, как он работает на локальном хосте? или мои запланированные задания организованы неправильно?

Ответы [ 2 ]

1 голос
/ 10 октября 2019

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

Когда вы запустили php artisan schedule:run, не выполняются условия для запуска других расписаний.

Задача cron php artisan schedule:run должна запускаться каждую минутув соответствии с рекомендациями Laravel.

0 голосов
/ 10 октября 2019

Сначала нам нужно понять, как это работает.

Если мы возьмем интервал в 1 минуту для запуска планировщика cron [здесь мы запускаем его вручную, тем не менее он будет использовать 1 минуту согласно уровню laravel/ [cron-expression] design]

It checks interval base on minutes for => minute based crons
It checks interval base on day's first hour's first minute for => day based crons
and so on ...

Например: Если ваш cron настроен на запуск каждые 2 минуты. 0 */2 * * *

И мы предполагаем, что текущее время: 02:00PM

0 */2 * * * будет работать только в течение этих временных интервалов

02:00PM to 02:01PM
02:02PM to 02:03PM
02:04PM to 02:05PM
02:06PM to 02:08PM
and so on ...

текущее времяis: 02:00PM -> теперь, если вы запустите php artisan schedule:run, ваш cron будет работать, так как текущее время находится между 14:00 и 02:01 PM

СЛЕДУЮЩЕЕ время выполнения будет между 14:02 PMдо 02:03 PM

СЕЙЧАС, если вы запустите php artisan schedule:run в 14:01:30, ничего не произойдет, так как он не попадет ни в какой интервал времени выполнения

Теперь ваши задачи планировщика


1. everyMinute => every minute
2. '0 */6 * * *' => every 6th minute
3. '0 */12 * * *' => evry 12th minute
4. daily => each day
  1. everyMinute

это будетвыполнять все время, независимо от того, когда вы стреляете php artisan schedule:run

0 */6 * * * каждую 6-ую минуту

Он имеет 6-минутный интервал, так что режим выполнения будет. [предположим, что его текущее время в 14:00]

-> it can execute between this time
02:00PM to 02:01PM 
02:06PM to 02:07PM 
02:12PM to 02:13PM 
02:18PM to 02:19PM 
and so on ...

так, чтобы выполнить

$schedule->call('Corymillz\Adverts\Component\PaidBoost@onPaidBoostMeb')
           ->cron('0 */6 * * *');

Время должно быть правильным.

Сначала убедитесь, что вы правильно установили часовой пояс. означает, что если вы печатаете

dd(\Carbon\Carbon::now());

Он должен показывать / печатать время на веб-странице точно так же, как время вашего компьютера / машины

Теперь запустите php artisan schedule:run -> через определенный интервал, как я определил выше

Например: Если ваше время на часах: 5:13 PM

, то вам нужно подождатьчтобы получить 6 minute * 3 => 18, так что следующий интервал будет 5:18PM to 5:19PM

Выполнить команду php artisan schedule:run в промежутке между 5:18PM to 5:19PM

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

если есть сомнения, прокомментируйте.

...