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入口
crontab -e 是以root身份执行定时任务
crontab -e -u www 是以www身份执行定时任务
- /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 会根据你的调度执行预定的程序
感谢大佬分享