Расписание нескольких кронов в Ларавеле
Я пытаюсь запустить несколько заданий в Laravel в разное время.
protected function schedule(Schedule $schedule)
{
$schedule->command('emails:send')
->dailyAt('08:00');
$schedule->command('emails:evening-status')
->dailyAt('17:00');
$schedule->command('email:weekly-report')
->weekly()->mondays()->at('08:00');
}
Проблема здесь в том, что работает только первая команда - emails:send
. Другие команды не работают в указанное время. Однако, когда я запускаю их вручную, они работают нормально.
Что мне не хватает?
Ответы
Ответ 1
Мы использовали аналогичные проблемы при использовании встроенного модуля планирования Laravel.
В нашем случае первая команда была безуспешно неудачной и предотвращала выполнение последующих запланированных команд.
В качестве быстрого теста попробуйте изменить порядок команд таким образом, чтобы электронные письма: отправить внизу и посмотреть, работает ли это. В общем, поймайте любые Исключения, которые могут быть выброшены, и это должно устранить проблему.
Ответ 2
Если вторая команда не работает:
$schedule->command('emails:evening-status')
->dailyAt('17:00');
вы можете вставить только одну строку кода, которая печатает текущую дату в каком-либо файле, например. "test.txt", затем проверьте требуемое время, если файл создан. Если файл создан, вы можете заключить, что что-то не так с кодом в script, который запланирован.
Ответ 3
Использовать очередь для обработки задания
в cron, добавьте все задания в очередь
Запуск нескольких сотрудников очереди
Ответ 4
если вам нужно использовать Laravel Schedule Use Этот код
$schedule = new Schedule();
$schedule->command('emails:send')
->dailyAt('08:00')->withoutOverlapping();
$schedule = new Schedule();
$schedule->command('emails:evening-status')
->dailyAt('17:00')->withoutOverlapping();
$schedule = new Schedule();
$schedule->command('email:weekly-report')
->weekly()->mondays()->at('08:00')->withoutOverlapping();
но может быть так, неверно, советуем использовать команду Larvel Artisan Command и поставить этот cammand на задание cron для хостов
Ответ 5
Аналогичная ситуация, за исключением того, что я могу вызывать метод для каждого cron с помощью call
, например:
$schedule->call('\App\Http\Controllers\comm\commCron::abc');
$schedule->call('\App\Http\Controllers\comm\commCron::xyz');
У меня была та же проблема, позже понятая первая cron вызывала exit
в некоторой точке ошибки.
Поэтому, пожалуйста, убедитесь, что ни одна из кролов не переделает в exit
или die()
. Просто return false
вместо этого (если вам нужно).
Ответ 6
Вы можете попробовать под кодом:
protected function schedule(Schedule $schedule)
{
$schedule->command('emails:send')
->dailyAt('08:00')->withoutOverlapping();
$schedule->command('emails:evening-status')
->dailyAt('17:00')->withoutOverlapping();
$schedule->command('email:weekly-report')
->weekly()->mondays()->at('08:00')->withoutOverlapping();
}
Выше код просто выполняется без перекрытия. Вы можете получить больше информации о предотвратить перекрытие.
Сообщите мне, если вы все еще сталкиваетесь с тем же.