laravel 11任务调度核心依赖系统cron每分钟触发schedule:run命令,需确保任务注册到kernel.php、app_env=production、cron使用绝对路径切换目录、时区一致并配置日志输出。

在 Laravel 11 中配置任务调度,核心仍是“系统 Cron 触发 Laravel 调度器”,而不是让 Laravel 自己跑后台服务。整个流程稳定、轻量,但几个关键点必须对齐,否则任务会静默不执行。
确认任务已注册到 Kernel.php
打开 app/Console/Kernel.php,检查 schedule() 方法里是否已添加任务。例如:
$schedule->command('backup:database')->dailyAt('03:00');$schedule->call(fn() => \Log::info('ping'))->everyMinute();
运行 php artisan schedule:list,能清晰列出所有任务才说明注册成功。如果报错或为空,优先检查命令类是否存在、语法是否正确、是否已加到 $commands 数组(如自定义命令)。
确保 APP_ENV=production
Laravel 11 默认在非 production 环境下跳过整个调度逻辑——不报错、不记录、也不执行。编辑 .env 文件,确认:
APP_ENV=production-
APP_DEBUG=false(上线环境必须关闭调试)
开发阶段可临时设为 local 并手动运行 php artisan schedule:run 测试,但上线前务必切回 production。
配置系统级 Cron 条目(绝对路径 + 切换目录)
以项目实际运行用户(如 www-data 或 nginx)身份执行:
sudo -u www-data crontab -e- 添加这一行(路径按你服务器实际情况替换):
注意:
– /usr/bin/php 是 PHP 的绝对路径(用 which php 查);
– cd /var/www/myapp 必须是项目根目录,否则 Artisan 命令找不到配置和命令类;
– 不要用相对路径或省略 cd,否则容易因工作目录错误导致任务失败。
验证时区与日志输出
Laravel 11 默认读取 config/app.php 中的 'timezone'(如 'Asia/Shanghai'),但系统时区也需一致:
- 运行
date看服务器当前时间与时区 - 确保
config/app.php和php.ini中时区设置匹配 - 给关键任务加日志,比如:
查看 storage/logs/ 下对应日志,比依赖终端输出更可靠。











