Подтвердить что ты не робот

Расписание нескольких кронов в Ларавеле

Я пытаюсь запустить несколько заданий в 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. Другие команды не работают в указанное время. Однако, когда я запускаю их вручную, они работают нормально.

Что мне не хватает?

4b9b3361

Ответ 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();
}

Выше код просто выполняется без перекрытия. Вы можете получить больше информации о предотвратить перекрытие.

Сообщите мне, если вы все еще сталкиваетесь с тем же.