Fedora 27环境下Gerrit 2.14.7启动失败:无日志、端口未监听
针对你在Fedora 27 + OpenJDK 1.8.0 + Gerrit 2.14.7环境下遇到的问题——启动gerrit_testsite/bin/gerrit.sh start失败、日志为空、进程存在但8080端口无监听、加-x发现脚本等待gerrit.r相关文件超时,我整理了几个实用的排查和解决步骤:
1. 直接查看Gerrit原生日志,别只依赖脚本日志
脚本的日志捕获经常不全,你可以直接去Gerrit站点的logs目录找真实的启动日志:
# 列出日志文件 ls -l /home/gerrit2/gerrit_testsite/logs/ # 实时查看错误日志 tail -f /home/gerrit2/gerrit_testsite/logs/error_log # 查看Gerrit主日志 tail -f /home/gerrit2/gerrit_testsite/logs/gerrit_log
这里大概率能找到启动卡住的原因,比如数据库连接失败、文件权限不足、配置项写错了之类的。
2. 检查Gerrit进程的真实状态
虽然进程存在,但可能已经僵死或者卡在某个系统调用上,用下面的命令排查:
# 查看进程的资源占用情况 ps aux | grep GerritCodeReview # 跟踪进程的系统调用,替换成你的Gerrit PID strace -p <your-gerrit-pid>
如果strace显示进程一直在等待某个文件、socket或者数据库连接,那问题点就很明确了。
3. 核对Gerrit配置文件的关键项
重点检查etc/gerrit.config里的两个核心配置:
- HTTP监听配置:确认
[httpd]块下的listenUrl是不是http://*:8080/,别写错端口或者绑定了错误的IP(比如只绑定127.0.0.1,但你以为是对外监听) - 数据库配置:如果用H2数据库,检查
db目录的权限;如果用MySQL,确认连接地址、用户名密码是否正确
# 查看配置文件内容 cat /home/gerrit2/gerrit_testsite/etc/gerrit.config # 检查db目录权限 ls -ld /home/gerrit2/gerrit_testsite/db/
4. 手动启动Gerrit,跳过脚本的等待逻辑
gerrit.sh会等待Gerrit生成gerrit.run文件作为启动成功的标志,一旦Gerrit启动卡住就会超时。你可以直接手动执行启动命令,看实时输出:
cd /home/gerrit2/gerrit_testsite/ java -jar bin/gerrit.war daemon -d /home/gerrit2/gerrit_testsite --run-id=1521606266.3474
这样能直接看到启动过程中的报错,比脚本的空日志有用多了。
5. 排查SELinux和权限问题
Fedora默认开启SELinux,很可能阻止Gerrit绑定端口或者访问文件:
# 临时关闭SELinux测试 setenforce 0
如果关闭后Gerrit能正常启动,就需要给Gerrit添加SELinux规则,比如允许它绑定8080端口、访问站点目录。
另外,确保运行Gerrit的用户(比如gerrit2)对整个gerrit_testsite目录有完整的读写权限:
chown -R gerrit2:gerrit2 /home/gerrit2/gerrit_testsite/
6. 验证OpenJDK的兼容性
虽然Gerrit 2.14.7支持OpenJDK 8,但有时候发行版的JDK配置可能有问题:
# 检查Java版本 java -version # 确认JAVA_HOME指向正确的OpenJDK 8目录 echo $JAVA_HOME
确保JAVA_HOME是/usr/lib/jvm/java-1.8.0-openjdk/这类正确的路径。
内容的提问来源于stack exchange,提问作者berndbausch

