Laravel Планирование пользовательских настроек - PullRequest
0 голосов
/ 28 ноября 2018

Я использую Laravel 5.7 и теперь сталкиваюсь со следующей проблемой: у меня есть таблица cronjobs, которая содержит много записей cronjob.Возьмем, к примеру, один:

Record one should be repeated every 50 minutes.

Я создал функцию getMinutelyCronjobs Извлекает из БД все cronjobs, которые должны выполняться за минуту.

Я пошел по этому пути: я создал класс в командах Minutely.php, где я получаю все эти cronjobs в функции handle().Когда я инициализировал все данные в классе Minutely.php, я не смог вызвать эту функцию handle(), используя $schedule->command('cronjobs:minutely')->everyMinute();.

Проблема в том, что каждый cronjob мог иметь разные minute_x (повторение в моем примере50) и тогда $schedule->command('cronjobs:minutely')->everyMinute(); должно быть $schedule->command('cronjobs:minutely')->everyMinute(50);.

вот моя getMinutelyCronjobs функция:

public static function getMinutelyCronjobs(){
        $fields = ['id', 'protocol', 'script', 'minutes_frequency', 'login_user', 'login_password', 'email'];
        return Cronjob::select($fields)->where('minutely', 1)
               ->orderBy('id', 'desc')
               ->get();
    }

Как я могу это реализовать?Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Если вы можете выполнить задание каждый час вместо каждых 50 минут, первый ответ сработает.Если вам нужно, чтобы это было определенно каждые 50 минут, вы можете попробовать что-то вроде этого, которое должно запускаться каждые 50 минут вместо каждых 60.

РЕДАКТИРОВАТЬ: Вы не предоставили подробную информацию о данных, которые вы извлекаетеиз вашей базы данных, относящейся к заданиям, но вы можете просто сделать что-то вроде этого, чтобы запланировать каждую работу.

foreach ($jobs as $job) {
    $schedule->command($job->command)->everyMinute()->when(function () {
        $now = new \DateTime;
        $minutes = floatval($now->format('G'))*60 + floatval($now->format('i'));
        return $minutes % $job->minutes == 0;
    });
}
0 голосов
/ 28 ноября 2018

everyMinute() вместо использования hourlyAt() метод

Запускать задачу каждый час через 50 минут после часа

$schedule->command('cronjobs:minutely')->hourlyAt(50);

для получения дополнительной информации прочитайте это товар

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...