Laravel 命令行调度器允许你在 Laravel 中对命令调度进行清晰流畅的定义。且使用这个任务调度器时,你只需要在你的服务器上创建单个 Cron 入口接口。你的任务调度在 app/Console/Kernel.php
的 schedule
方法中进行定义
一.定义调度
调度频率设置
当然了,你可以给你的任务分配多种调度计划:
方法 | 描述 |
---|---|
->cron('* * * * *'); | 自定义 Cron 时间表执行任务 |
->everyMinute(); | 每分钟执行一次任务 |
->everyFiveMinutes(); | 每五分钟执行一次任务 |
->everyTenMinutes(); | 每十分钟执行一次任务 |
->everyFifteenMinutes(); | 每十五分钟执行一次任务 |
->everyThirtyMinutes(); | 每三十分钟执行一次任务 |
->hourly(); | 每小时执行一次任务 |
->hourlyAt(17); | 每小时第 17 分钟执行一次任务 |
->daily(); | 每天午夜执行一次任务(译者注:每天零点) |
->dailyAt('13:00'); | 每天 13 点执行一次任务 |
->twiceDaily(1, 13); | 每天 1 点 和 13 点分别执行一次任务 |
->weekly(); | 每周执行一次任务 |
->weeklyOn(1, '8:00'); | 每周一的 8 点执行一次任务 |
->monthly(); | 每月执行一次任务 |
->monthlyOn(4, '15:00'); | 每月 4 号的 15 点执行一次任务 |
->quarterly(); | 每季度执行一次任务 |
->yearly(); | 每年执行一次任务 |
->timezone('America/New_York'); | 设定时区 |
结合其他一些特定条件,我们可以生成在一周中特定时间运行的任务。举个例子,在每周一执行命令:
// 每周一 13:00 执行...
$schedule->call(function () {
//
})->weekly()->mondays()->at('13:00');
// 工作日(周一至周五) 8点 至 17 点每小时执行一次...
$schedule->command('foo')
->weekdays()
->hourly()
->timezone('America/Chicago')
->between('8:00', '17:00');
额外的限制条件列表如下:
方法 | 描述 |
---|---|
->weekdays(); | 限制任务在工作日执行 |
->weekends(); | 限制任务在周末执行 |
->sundays(); | 限制任务在周日执行 |
->mondays(); | 限制任务在周一执行 |
->tuesdays(); | 限制任务在周二执行 |
->wednesdays(); | 限制任务在周三执行 |
->thursdays(); | 限制任务在周四执行 |
->fridays(); | 限制任务在周五执行 |
->saturdays(); | 限制任务在周六执行 |
->between($start, $end); | 限制任务在 $start 和 $end 之间执行 |
->when(Closure); | 当闭包返回为真时执行 |
->environments($env); | 限制任务在特定环境中执行 |
二.启动调度器
当使用这个调度器时,你只需要把下面的 Cron 入口添加到你的服务器中即可。如果你不知道怎么在服务器中添加 Cron 入口,可以考虑使用一些服务来管理 Cron 入口,比如 Laravel Forge:
执行crontab -e 在里面添加下面的cron入口
* * * * * /www/server/php/72/bin/php/ /www/wwwroot/zx/artisan schedule:run >> /dev/null 2>&1
(1) /www/server/php/72/bin/php/是PHP文件所在的位置
注:若不知道php文件在哪 可在linux下执行 find / -name php.ini
(2) /www/wwwroot/zx/ 是项目根目录
(3)* * * * * 指这个 Cron 为每分钟执行一次 Laravel 的命令行调度器
(4)当 schedule:run
命令被执行的时候,Laravel 会根据你的调度执行预定的程序。