Laravel 8在BlueHost共享主机下用cron job执行任务调度失败求助
BlueHost共享主机Laravel任务调度无法触发的原因及解决方案
- PHP CLI版本不匹配
BlueHost中cron调用的PHP版本与SSH环境下的PHP版本通常不是同一个,你直接执行artisan命令正常,不代表cron调用的/usr/local/bin/php版本满足Laravel的运行要求。你可以先修改cron命令输出版本验证:
* * * * * /usr/local/bin/php -v >> /home3/urbanhq6/php_version.log 2>&1
等待1分钟后查看日志文件的PHP版本,若低于你项目Laravel要求的最低版本,替换为对应版本的PHP路径即可,BlueHost常见的多版本PHP路径为/usr/local/bin/ea-php81、/usr/local/bin/ea-php82这类格式。
- 未指定项目工作目录
Laravel的schedule:run命令要求必须在项目根目录下执行,共享主机cron的默认工作目录不是你的项目目录,会导致读取不到项目文件报错。修改cron命令先切换到项目根目录再执行调度:
* * * * * cd /home3/urbanhq6/public_html/new && /usr/local/bin/php artisan schedule:run >> /dev/null 2>&1
- 权限不足
cron运行的用户身份和你SSH登录的用户身份权限不同,会出现artisan文件无执行权限、storage目录无写入权限的问题,先执行以下命令调整权限:
chmod +x /home3/urbanhq6/public_html/new/artisan chmod -R 755 /home3/urbanhq6/public_html/new/storage
- 未开启错误日志无法定位问题
你当前的cron命令把所有输出丢弃到/dev/null,无法看到具体报错信息,修改为输出到自定义日志文件即可定位具体错误:
* * * * * cd /home3/urbanhq6/public_html/new && /usr/local/bin/php artisan schedule:run >> /home3/urbanhq6/schedule_log.log 2>&1
等待2分钟后查看schedule_log.log的内容,即可直接看到是扩展缺失、函数禁用还是路径错误等具体问题。
- 调度依赖函数被主机禁用
BlueHost共享主机会默认禁用proc_open、proc_get_status这类Laravel调度器依赖的函数,你可以直接在cron中调用自定义命令验证,如果直接调用update:record命令可以正常运行,就说明是调度器依赖函数被禁用,可联系BlueHost客服放开对应函数的限制,或者直接把cron配置为直接调用你的自定义命令即可:
* * * * * cd /home3/urbanhq6/public_html/new && /usr/local/bin/php artisan update:record >> /dev/null 2>&1
另外你Kernel.php中重复引入了SendReminderEmails类,虽然不影响运行,但建议删除重复的use行避免后续出现异常。
内容的提问来源于stack exchange,提问作者zubair M
相关产品推荐
相关产品推荐

