在不同的日子每隔N分钟安排一次作业

时间:2017-03-16 14:21:02

标签: php laravel cron scheduling scheduler

我必须在特定时间运行cronjob:

第一个:工作日每隔2分钟9:00-18:00

第二个:周六10:00-18:00每2分钟

我能得到的最远的是:

$schedule->call(function () {
    (new SendSMS())->run();
})->weekdays()->between('9:00', '18:00');

我不知道如何添加everyTwoMinutes约束,因为我只发现了这些方法:

->everyMinute();    
->everyFiveMinutes();
->everyTenMinutes();
->everyThirtyMinutes();

第二个问题是,对于第二个条件,我不想添加另外一个这样的时间表:

$schedule->call(function () {
    (new SendSMS())->run();
})->saturdays()->between('11:00', '18:00');

我会写一个匹配两次的单一,是否可能?

2 个答案:

答案 0 :(得分:2)

已更新:这将按所需的时间间隔运行。

    $schedule->call(function () {
        $datetime = date('Y-m-d H:i:s');
        echo $datetime;
    })->everyMinute()->when(function() {

        $now = new \DateTime();

        # don't run on Sundays
        if ($now->format('l') == 'Sunday') {
            return false;
        }

        # run every two minutes
        if ($now->format('i')%2 == 1) {
            return false;
        }

        if ($now->format('l') == 'Saturday') {
            $start_date = new \DateTime('today 10:00');
            $end_date = new \DateTime('today 18:00');
            return ($start_date <= $now && $now < $end_date);
        } else {
            $start_date = new \DateTime('today 09:00');
            $end_date = new \DateTime('today 18:00');
            return ($start_date <= $now && $now < $end_date);
        }
    });

答案 1 :(得分:1)

您可以在扩展Event

的类中创建自己的自定义函数
public function everyTwoMinutes()
{
    return $this->cron('*/2 * * * * *');
}