You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel定时任务缓存异常:手动执行正常,调度执行旧版本代码

解决Laravel调度器执行旧版本命令的问题

这种情况我之前排查过好几次,大概率是执行环境不一致或者缓存没清理彻底导致的,给你几个针对性的排查和解决步骤:

1. 清理Laravel调度器专属缓存

你提到已经清了各类缓存,但可能漏掉了调度器的专属缓存。Laravel会缓存调度任务的配置,执行这个命令彻底清除:

php artisan schedule:clear

执行完之后可以再手动触发一次调度器测试:

php artisan schedule:run

2. 检查调度器的执行路径与环境

手动执行正常但自动执行异常,最常见的原因是执行环境不一致:

  • 给调度任务添加日志输出,方便排查执行时的错误或路径问题:
    protected function schedule(Schedule $schedule){
        $schedule->command('ticket:completion')
            ->hourly()
            ->appendOutputTo(storage_path('logs/ticket_completion.log'));
    }
    
    等待调度自动执行后,查看日志文件,确认是否有路径错误、权限问题或者加载了旧文件的提示。
  • 尝试在调度中使用绝对路径执行命令,避免环境变量差异:
    protected function schedule(Schedule $schedule){
        // 替换成你服务器上的PHP绝对路径和项目绝对路径
        $schedule->exec('/usr/local/bin/php /var/www/your-project/artisan ticket:completion')
            ->hourly();
    }
    

3. 确认Supervisor进程已重启

如果你用Supervisor管理Laravel调度器的常驻进程:

  • 先重启对应的Supervisor进程,确保它加载了最新的代码和配置:
    supervisorctl restart your-schedule-worker-name
    
  • 检查Supervisor配置文件中的命令,确保使用了项目的绝对路径,比如:
    command=/usr/local/bin/php /var/www/your-project/artisan schedule:run
    

4. 检查系统Crontab配置

如果是用系统Crontab触发调度器:

  • 打开Crontab配置(crontab -e),确认条目是这样的(必须先切换到项目目录):
    * * * * * cd /var/www/your-project && php artisan schedule:run >> /dev/null 2>&1
    
  • 确认Crontab的执行用户和你手动执行命令的用户一致,避免权限或环境变量差异。

5. 清除所有Laravel优化缓存

如果之前执行过php artisan optimize或php artisan config:cache,可能导致命令类被缓存:

php artisan optimize:clear

这个命令会一次性清除配置缓存、路由缓存、视图缓存、调度缓存等所有优化缓存。


内容的提问来源于stack exchange,提问作者Mateus Alberghini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:42:33