
Laravel 5.6 的 yearly() 调度器固定在每年 1 月 1 日 00:00 执行,不支持 yearlyOn() 方法(该方法自 Laravel 8.0 起引入),PHP 版本(如 5.6)本身不影响此行为。
laravel 5.6 的 `yearly()` 调度器固定在每年 1 月 1 日 00:00 执行,不支持 `yearlyon()` 方法(该方法自 laravel 8.0 起引入),php 版本(如 5.6)本身不影响此行为。
在 Laravel 5.6 中,任务调度器(Task Scheduling)通过 App\Console\Kernel 类的 schedule() 方法定义定时任务。其中 yearly() 是一个内置频率修饰符,其语义明确且不可配置:它等价于 ->cron('0 0 1 1 *'),即每年 1 月 1 日凌晨 0 点整触发。
✅ 正确用法示例:
// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
$schedule->command('backup:database')
->yearly(); // ✅ 等效于每年 1 月 1 日 00:00 执行
}❌ 常见误区:
- yearlyOn($day, $month) 在 Laravel 5.6 中不存在 —— 该方法直到 Laravel 8.0 才被添加,用于指定任意日期(如 yearlyOn(15, 'March') 表示每年 3 月 15 日);
- 不要混淆 PHP 版本与 Laravel 版本:PHP 5.6 是运行环境,而 yearlyOn() 是 Laravel 框架特性,取决于 Laravel 版本,与底层 PHP 版本无关;
- yearly() 不会“记住”注册当天的日期,它始终固定为 1 月 1 日,而非“创建任务那天的同月同日”。
⚠️ 注意事项:
- Laravel 5.6 已于 2019 年 9 月结束官方维护,建议升级至受支持版本(如 Laravel 10+)以使用更灵活的调度语法(如 yearlyOn()、quarterly()、twiceYearly() 等);
- 若必须在 Laravel 5.6 中实现非 1 月 1 日的年度任务,可使用 cron() 方法手动指定:
->cron('0 0 25 12 *') // 每年 12 月 25 日 00:00 执行
总结:yearly() 是确定性、标准化的年度触发器;如需自定义日期,请升级 Laravel 或改用 cron 表达式,切勿尝试调用不存在的 yearlyOn() 方法——这将导致 Call to undefined method 运行时错误。


















