Запускать планировщик Laravel CRON через несколько интервалов - PullRequest
0 голосов
/ 03 октября 2019

У меня есть особая функция в приложении Laravel, которую я хочу запускать ежедневно в 1, 9, 1 и 6 часов утра.

Я пытался создать отдельное расписание для той же команды 2 раза.

$schedule->command('command:commandname')->twiceDaily(1, 9);
$schedule->command('command:commandname')->twiceDaily(13, 18);

Но это не сработало.

Ответы [ 2 ]

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

Вы можете использовать метод cron(), чтобы указать это как пользовательское расписание:

$schedule->command('command:commandname')->cron('0 1,9,13,18 * * *');

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

public function handle() {
    if(!in_array(now()->hour, [1, 9, 13, 18])) {
        return;
    }

    // the rest of your command
}

(Вы хотели бы быть немного осторожнее с этим подходом. Если другие задания выполняются более чем за час до запуска этого задания, это может подтолкнуть его выполнение к следующему час, что может привести к пропуску. Маловероятно, но что-то нужно учитывать.)

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

Рассмотрите возможность использования ->at():

$schedule->command('command:commandname')
    ->at('01:00')
    ->at('09:00')
    ->at('13:00')
    ->at('18:00');
...