Laravel Schedule定时任务:如何配置工作日指定时段每2小时执行
问题根因
- Laravel的
between()方法属于运行时校验规则,不会修改最终生成的Cron表达式,只会在任务触发时校验当前时间是否符合区间要求,不符合就直接跳过执行。你在任务列表看到的00:00是Cron层面的触发时间,实际到点后不会执行业务代码。 everyTwoHours()默认生成的Cron规则是0 */2 * * *,即从0点开始每2小时触发一次,weekdays()仅限定工作日触发,不会调整小时的起始计数点。
可选解决方案
方案1:无需修改代码,忽略Cron显示误差
你现有的代码逻辑本身是符合要求的,between('7:59', '18:01')会自动过滤掉0点、2点等非目标时段的触发请求,不会实际执行业务逻辑,只是任务列表的下一次执行时间显示不符合预期而已,不影响正常使用。
方案2:手动指定Cron表达式(推荐,显示与执行完全一致)
直接通过cron()方法写原生Cron规则,完全匹配你的需求,也不会出现显示误差:
$schedule->call('App\Http\Controllers\Controller@function')->cron('0 8,10,12,14,16,18 * * 1-5');
该Cron规则的含义为:每周一到周五的8、10、12、14、16、18点的0分执行,完全覆盖你要的「工作日8点到18点每2小时执行一次」的需求。
内容的提问来源于stack exchange,提问作者Wahsei
相关产品推荐
相关产品推荐

