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

Docker环境下Laravel Schedule触发命令后Job未执行,手动运行命令正常

问题排查方案&解决方案

核心原因优先级从高到低排列:

  • 配置缓存导致env函数失效
    如果你在容器部署流程中执行了php artisan config:cache生成配置缓存,Laravel会屏蔽所有env()函数的调用,直接返回null。你的调度逻辑用env("AMBIENTE")做判断,此时条件完全不触发,命令自然不会被执行。
    修复方法:
    1. 在config/app.php中添加自定义配置项:'ambiente' => env('AMBIENTE', 1)
    2. 将Kernel中的判断逻辑替换为if (config('app.ambiente') == "2")和if (config('app.ambiente') == "1")
    3. 重新执行php artisan config:cache生成新的缓存
  • cron运行上下文环境变量缺失
    crontab进程运行时不会加载交互式shell的环境变量配置(如.bashrc、.profile内的变量),如果你的AMBIENTE变量是配置在shell用户的个人配置文件中,而非Docker容器全局环境变量或.env文件,cron触发时无法读取到正确的变量值,导致调度条件不生效。
    验证方法:在Kernel的schedule方法最开头添加日志打印:\Log::info('调度器触发,当前AMBIENTE值:' . env('AMBIENTE')),触发调度后查看Laravel日志确认变量值是否符合预期。
  • 运行用户权限差异
    手动执行命令的用户和crontab所属用户不一致时,会出现权限不足导致的静默失败:比如cron所属用户没有权限向队列推送任务、没有权限读取.env文件、没有权限执行命令逻辑等。
    验证方法:执行crontab -l确认所属用户后,切换到该用户执行/usr/local/bin/php /var/www/artisan consultar_a1,观察运行结果是否和你之前手动执行的结果一致。
  • 命令执行无日志导致无法定位问题
    你当前仅记录了cron本身的运行日志,没有记录schedule调度命令的执行输出,无法确认命令是否真的被触发、执行过程有没有报错。
    修复方法:给调度命令追加输出配置,示例:
    $schedule->command('consultar_a1')->dailyAt('12:23')->appendOutputTo('/var/log/consultar_a1_schedule.log');
    
    触发调度后查看该日志即可获取命令的执行详情、报错信息。
  • 队列驱动配置不一致
    你的命令是派发Job到队列执行,如果cron运行时读取到的队列驱动和手动执行时不一致(比如cron上下文读取到null驱动,Job直接被丢弃),supervisor自然不会有相关执行日志。你可以在命令的handle方法开头添加日志,确认命令本身是否被执行到。

内容的提问来源于stack exchange,提问作者Felipe Colussi-oliva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:45:03