定时任务调度在 Laravel 中的实现

开启调度器

下面是你唯一需要添加到服务器的 Cron 条目,如果你不知道如何添加 Cron 条目到服务器,可以考虑使用诸如 Laravel Forge 这样的服务来为管理 Cron 条目:

* * * * * php /your-project-path/artisan schedule:run >> /dev/null 2>&1

该 Cron 将会每分钟调用一次 Laravel 命令调度器,然后,Laravel 评估你的调度任务并运行到期的任务。

定义调度

你可以在 App\Console\Kernel 类的 schedule 方法中定义所有调度任务。让我们从一个调度任务的例子开始,在这个例子中,我们将会在每天午夜调度一个被调用的闭包。在这个闭包中我们将会执行一个数据库操作来清空表:

call(function () {
            DB::table('recent_users')->delete();
        })->daily();
    }
}

 参数:

方法描述
->cron('* * * * *');在自定义Cron调度上运行任务
->everyMinute();每分钟运行一次任务
->everyFiveMinutes();每五分钟运行一次任务
->everyTenMinutes();每十分钟运行一次任务
->everyFifteenMinutes();每十五分钟运行一次任务
->everyThirtyMinutes();每三十分钟运行一次任务
->hourly();每小时运行一次任务
->hourlyAt(17);每小时第十七分钟运行一次任务
->daily();每天凌晨零点运行任务
->dailyAt('13:00');每天13:00运行任务
->twiceDaily(1, 13);每天1:00 & 13:00运行任务
->weekly();每周运行一次任务
->monthly();每月运行一次任务
->monthlyOn(4, '15:00');每月4号15:00运行一次任务
->quarterly();每个季度运行一次
->yearly();每年运行一次
->timezone('America/New_York');设置时区

这些方法可以和额外的约束一起联合起来创建一周特定时间运行的、更加细粒度的调度,例如,要在每周一调度一个命令:

$schedule->call(function () {
    // 每周星期一13:00运行一次...
})->weekly()->mondays()->at('13:00');

// 工作日的上午8点到下午5点每小时运行...
$schedule->command('foo')
         ->weekdays()
         ->hourly()
         ->timezone('America/Chicago')
         ->between('8:00', '17:00');

下面是额外的调度约束列表:

方法描述
->weekdays();只在工作日运行任务
->sundays();每个星期天运行任务
->mondays();每个星期一运行任务
->tuesdays();每个星期二运行任务
->wednesdays();每个星期三运行任务
->thursdays();每个星期四运行任务
->fridays();每个星期五运行任务
->saturdays();每个星期六运行任务
->between($start, $end);基于特定时间段运行任务
->when(Closure);基于特定测试运行任务


评论 (0)

发表评论