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

Laravel CRON任务在AWS Ubuntu环境中无法正常运行

解决Laravel调度任务提示“No scheduled commands are ready to run”的问题

我之前部署Laravel定时任务时也碰到过一模一样的问题——手动跑命令完全正常,但调度就是不触发,咱们一步步来排查解决:

1. 优先排查时区不一致问题

这是最常见的坑!Laravel应用时区和服务器系统时区不匹配,会导致你设置的10:00和服务器实际时间对不上,调度自然认为没到执行时间:

  • 检查Laravel的.env文件,确认APP_TIMEZONE设置正确(比如国内常用Asia/Shanghai)
  • 运行服务器命令date,查看系统当前时间,和你预期的10点是否一致
  • 如果不一致,要么修改.env里的时区,要么调整服务器时区:Ubuntu下可以执行sudo dpkg-reconfigure tzdata来设置正确时区

2. 检查Crontab的执行用户与PHP路径

  • 执行用户问题:如果用root用户添加的crontab,但Laravel项目文件权限是www-data用户的,可能会导致调度无法正常读取任务配置。建议切换到www-data用户添加定时任务:
    sudo -u www-data crontab -e
    
    然后把你的调度命令粘贴进去。
  • PHP路径问题:系统默认的php命令可能和你手动执行时用的不是同一个版本/路径。先运行which php获取正确的PHP CLI路径,比如输出是/usr/bin/php,然后把crontab里的命令改成:
    * * * * * /usr/bin/php /var/www/html/app/artisan schedule:run >> /dev/null 2>&1
    

3. 开启调度日志排查细节

先不要把输出丢到/dev/null,改成输出到日志文件,方便查看具体错误:

* * * * * php /var/www/html/app/artisan schedule:run >> /var/www/html/app/storage/logs/schedule.log 2>&1

然后查看日志文件storage/logs/schedule.log,里面会有更详细的执行信息,比如是否加载到任务、有没有权限问题等。

另外,手动运行php artisan schedule:list,可以列出所有已配置的调度任务,确认你的email:reminder任务是否在列表里,以及显示的执行时间是否符合预期。

4. 临时去掉--force参数测试

虽然手动运行带--force没问题,但有时候调度环境下这个参数可能会有隐性冲突。先把Kernel.php里的任务改成:

$schedule->command('email:reminder')->dailyAt('10:00');

然后重新测试调度是否正常执行。


内容的提问来源于stack exchange,提问作者Mr Robot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:13:08