laravel 10 的任务调度通过 app\console\kernel 的 schedule 方法链式调用实现,语义化方法自动映射 cron 表达式;支持基础周期、精确时间点、间隔执行、自定义组合等丰富方式,可自由搭配如 weekdays()->at('09:15')->withoutoverlapping()->timezone('asia/shanghai')。

Laravel 10 的任务调度方法集中在 App\Console\Kernel 类的 schedule 方法中,通过链式调用设置执行频率。这些方法语义清晰、底层自动映射为 Cron 表达式,无需手动写 Cron 字符串。
基础周期类方法
这些是最常用、最直观的频率设定方式:
-
everyMinute():每分钟执行一次(* * * * *) -
hourly():每小时整点执行(0 * * * *) -
daily():每天凌晨 00:00 执行(0 0 * * *) -
weekly():每周日 00:00 执行(0 0 * * 0) -
monthly():每月 1 号 00:00 执行(0 0 1 * *) -
quarterly():每季度第一天 00:00 执行 -
yearly():每年 1 月 1 日 00:00 执行
带时间点的精确控制方法
适合需要指定具体钟点的场景:
-
dailyAt('03:30'):每天 03:30 执行(30 3 * * *) -
weeklyOn(3, '14:00'):每周三 14:00 执行(0 14 * * 3) -
twiceDaily(7, 19):每天 07:00 和 19:00 各执行一次 -
weekdays('08:00'):仅周一至周五 08:00 执行(0 8 * * 1-5)
间隔类高频方法
适用于需固定间隔但非整点的轻量任务:
-
everyFiveMinutes()(*/5 * * * *) -
everyTenMinutes()(*/10 * * * *) -
everyFifteenMinutes()(*/15 * * * *) -
everyThirtyMinutes()(*/30 * * * *)
自定义与组合增强方法
用于复杂逻辑或避免常见问题:
-
cron('0 9 * * 1-5'):直接传入标准 Cron 表达式,如工作日上午 9 点 -
withoutOverlapping():防止同一任务上一个实例未结束时重复启动 -
onOneServer():集群环境下确保只在一台服务器上运行 -
timezone('Asia/Shanghai'):单独为该任务指定时区,不依赖应用默认时区 -
appendOutputTo(...)或sendOutputTo(...):记录执行日志便于排查
这些方法可自由组合,比如:
$schedule->command('notify:reminders')
->weekdays()
->at('09:15')
->withoutOverlapping()
->timezone('Asia/Shanghai');
表示工作日上午 9:15 发送提醒,不重叠、有时区保障。
不复杂但容易忽略











