Laravel定时任务需外部每分钟调用php artisan schedule:run,Linux服务器必须配置Cron;本地调试可用schedule:work;常见失败原因包括工作目录错误、PHP路径不明确、权限不足及锁机制失效。
定时任务没跑起来?先确认
是否被正确调用
Laravel 的定时任务本身不自动触发,它只提供一个调度定义接口,真正执行靠的是外部每分钟调用一次的
。如果你发现
写了但没反应,大概率是服务器没配 Cron。
Linux 服务器必须加一行 Cron:
本地开发用
可以常驻监听(Laravel 6+),但它不替代生产环境的 Cron,仅用于调试
别在 Homestead/Valet 等环境里依赖系统 Cron 自动启用——有些默认没开,得手动
执行失败但没报错?检查命令权限和路径
常见现象是 Cron 日志里出现
或直接静默退出。根本原因通常是工作目录不对或 PHP CLI 版本不一致。
Cron 默认工作目录是 root 用户家目录,不是项目根目录,所以必须显式
进入项目路径
用绝对路径调用 PHP:比如
而非
,避免 Cron 使用系统自带旧版 PHP(尤其 Ubuntu)
如果任务里调用了 shell 命令(如
),确保运行 Cron 的用户有对应权限,且环境变量(如
)已预设
任务卡住、重复执行、或时间不准?看清楚
和
的作用边界
定时任务不是“到了点就立刻执行”,而是每分钟由
检查一次是否该跑。如果上一个实例还没结束,新实例就会被跳过——除非你主动干预。
Laravel 13.2.0
PHP中文网提供Laravel 13.2.0版本下载,Laravel框架 是基于 PHP 8.3+ 的高性能框架,官方推荐通过 Composer 安装。它内置 AI SDK、JSON:API Resources 及原生向量搜索,支持属性驱动开发与队列路由,大幅提升开发效率。相比旧版,13.2.0 优化了缓存 TTL 管理与实时通信,无需 Redis 即可横向扩展。作为现代 Web 开发首选,它兼顾安全与极速体验,助您快速构建企业级应用。
下载
是靠在 storage/framework/cache/ 下写锁文件实现的,不是数据库锁;如果应用部署在多台机器,这个锁会失效
让命令异步执行,但不解决超时问题;若子进程崩溃或被 kill,主进程不会感知,锁文件可能残留,导致后续任务永久被跳过
长时间任务(如导出大 Excel)建议配合
+ Redis 驱动的锁,而不是只靠
测试定时任务逻辑时,别直接等明天
开发阶段验证
是否真能跑通,没必要等到凌晨两点。
临时改成
或
快速验证逻辑
用
(需 Laravel 9.25+)可模拟触发,绕过时间判断
注意:测试时不要删掉正式环境的 Cron,否则上线后容易忘记补回
事情说清了就结束。最常被忽略的其实是 Cron 的用户权限和工作目录——不是代码写错了,是它根本没进到你的项目里。
schedule:runphp artisan schedule:run$schedule->command('inspire')->hourly()* * * * * cd /var/www/your-app && php artisan schedule:run >> /dev/null 2>&1php artisan schedule:worksudo service cron startschedule:runCould not open input file: artisancd/usr/bin/phpphpexec('git pull')$PATHwithoutOverlapping()runInBackground()schedule:runwithoutOverlapping()runInBackground()onOneServer()withoutOverlapping()$schedule->command('backup:db')->dailyAt('02:00')everyMinute()twiceDaily(1, 2)php artisan schedule:test --event="backup:db"