laravel 11 中“任务连接”指调度器与系统 cron 或 supervisor 的可靠通路配置:需显式注册 console\kernel、配置 crontab 每分钟调用 schedule:run,或用 schedule:work 配合 supervisor;务必验证执行日志、任务列表及时区设置。

在 Laravel 11 中,“任务连接”不是标准术语,通常你想表达的是任务调度如何正确连接到系统 Cron 或守护进程以稳定运行——即确保定义好的定时任务能被真实触发、执行、不丢不重。这本质是“调度通路”的配置,而非数据库或队列连接。
确认调度入口已注册(Laravel 11 特殊点)
Laravel 11 将核心绑定逻辑前移至 bootstrap/app.php,不再默认加载 app/Console/Kernel.php 自动注册。你需要显式绑定调度器:
- 确保已创建
app/Console/Kernel.php,并继承Illuminate\Foundation\Console\Kernel - 在
bootstrap/app.php的withSingletons()中注册它:Illuminate\Contracts\Console\Kernel::class => App\Console\Kernel::class - 检查
schedule()方法是否已正确定义,例如:$schedule->command('inspire')->everyMinute();
建立与系统 Cron 的可靠连接
这是最关键的“连接”环节:Laravel 调度器本身不主动轮询,必须靠外部每分钟调用一次 schedule:run 才能生效。
- 在服务器执行:
crontab -e - 添加且仅需这一行(路径务必替换成你的真实项目路径):
* * * * * cd /var/www/myapp && php artisan schedule:run >> /dev/null 2>&1 - ⚠️ 必须用
cd切换目录,否则无法加载.env和自动加载规则,导致命令找不到或配置错乱 - 验证 Cron 是否运行:
sudo systemctl status cron(Ubuntu/Debian)
替代方案:用 schedule:work 连接 Supervisor(适合容器/无 Cron 环境)
当无法使用系统 Cron(如 Docker、共享主机),改用常驻进程方式建立更精细的连接:
- 安装 Supervisor 后,新建配置
/etc/supervisor/conf.d/laravel-schedule.conf - 关键字段示例:
command=php /var/www/myapp/artisan schedule:workdirectory=/var/www/myappuser=www-data - 启用:
sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl start laravel-schedule - 优势:毫秒级精度、自动重启、日志独立、避免 1 分钟延迟
验证连接是否成功
别只看代码写了没,要实测通路是否打通:
- 手动触发一次:
php artisan schedule:run,观察终端输出是否有 “Running scheduled command…” - 查看日志:
storage/logs/laravel.log或你自定义的输出文件(如->output('/storage/logs/schedule.log')) - 列出所有注册任务:
php artisan schedule:list,确认你的任务出现在表中且时间计算正确 - 检查时区:
config/app.php中'timezone' => 'Asia/Shanghai'必须设置为 IANA 格式,它决定dailyAt()等方法的实际触发时刻











