升级Java至Azul Zulu 11后Ubuntu 16.04上Tomcat 8.5服务无法启动
Ubuntu 16.04 LTS下升级Azul Zulu 11后Tomcat 8.5服务无法启动问题
问题详情
- 服务器环境:Ubuntu 16.04 LTS
- 操作:将Java从Azul Zulu 7升级至Azul Zulu 11
- 现象:Tomcat 8.5无法通过systemd服务启动,执行
systemctl status tomcat85无有效排查信息;但手动执行/opt/tomcat85/bin/startup.sh可正常启动Tomcat - 当前Tomcat服务文件内容:
[Unit] Description=Apache Tomcat 8.5 Servlet Container After=syslog.target network.target [Service] User=tomcat85 Group=tomcat85 Type=forking Environment=JAVA_HOME=/usr/lib/jvm/zulu-11-amd64 Environment=CATALINA_PID=/opt/tomcat85/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat85 Environment=CATALINA_BASE=/opt/tomcat85 EnvironmentFile=/etc/default/tomcat85 WorkingDirectory=/opt/tomcat85 ExecStart=/opt/tomcat85/bin/startup.sh ExecStop=/opt/tomcat85/bin/shutdown.sh #Restart=on-failure StandardOutput=syslog StandardError=syslog LimitNOFILE=65536 SyslogIdentifier=tomcat85 [Install] WantedBy=multi-user.target
- 排查现状:
journalctl -xe未返回有效信息,但catalina.out中存在错误(见配图)
排查解决思路
- 检查环境变量冲突:服务文件中已指定
JAVA_HOME,但同时加载了/etc/default/tomcat85环境文件,需确认该文件内是否存在旧的JAVA_HOME配置或与Java 11不兼容的参数(如过时的JAVA_OPTS) - 验证PID文件权限与生成:
Type=forking依赖PID文件判断启动状态,检查/opt/tomcat85/tomcat.pid是否能被tomcat85用户创建、写入;手动启动后查看该文件是否存在,确认systemd启动时是否因PID文件问题判定启动失败 - 对比权限差异:手动启动用当前用户权限,systemd用tomcat85用户,执行
su - tomcat85 -c 'echo $JAVA_HOME && java -version'确认用户上下文内的Java环境是否正常;同时检查/opt/tomcat85、/usr/lib/jvm/zulu-11-amd64目录的读写权限 - 调整日志输出定位错误:暂时注释
StandardOutput=syslog和StandardError=syslog,改为输出到本地文件:
重新启动服务后查看日志文件,获取具体错误信息StandardOutput=file:/opt/tomcat85/logs/systemd_stdout.log StandardError=file:/opt/tomcat85/logs/systemd_stderr.log - 确认版本兼容性:Tomcat 8.5需8.5.32及以上版本才正式支持Java 11,执行
/opt/tomcat85/bin/catalina.sh version查看Tomcat版本;同时用/usr/lib/jvm/zulu-11-amd64/bin/java -version验证Java环境正常 - 添加预执行命令排查环境:在服务文件的
[Service]段添加:
执行ExecStartPre=/usr/lib/jvm/zulu-11-amd64/bin/java -versionsystemctl daemon-reload后重启服务,再通过journalctl -u tomcat85查看预执行命令的输出,确认systemd上下文内Java环境是否正常
内容的提问来源于stack exchange,提问作者Gedalya
相关产品推荐
相关产品推荐

