今天在使用jenkins进行部署的时候,遇到了两个问题,已解决,特此记录。
问题一:
远程启动tomcat,tomcat已经启动,但是服务访问失败,检查catalina.out也可以明显看到这一点。
登陆远程服务器,执行xx/tomcat/bin/startup.sh启动成功。
启动命令完全一致;
解决思路:
远程启动tomcat后,使用ps -ef|grep tomcat 拿到进程的完整启动命令。
本地启动tomcat后,使用ps -ef|grep tomcat 拿到进程的完整启动命令。
两个命令对比,会发现使用的jdk不一致,其他的完全一致。
远程启动的启动命令中的jdk路径:/usr/bin/java ,执行 /usr/bin/java -version 拿到远程启动命令的版本,可以再次清晰看到两者不一致。
远程服务器上执行 java -version,得到的版本号与本地启动命令中的版本号一致。
最终,知道,所有的一切是因为jdk版本不一致导致的,联系运维解决服务器的环境问题。
问题二:
远程启动jar,启动命令:cd xx; nohup java -jar xx.jar > /dev/null 2>&1 & 执行后,在远程服务器使用ps -ef|grep java xx.jar查不到进程;
本地启动:nohup java -jar xx.jar > /dev/null 2>&1 & 启动后,使用ps -ef|grep xx.jar可以看到对应进程;
解决思路:
此时远程启动没有任何日志,只能知道是没有启动。
调整启动命令为:nohup java -jar xx.jar > xx.out 2>&1 &, 此时能够看到xx.out中的报错信息为:
Exception in thread "main" java.lang.unsupportedClassversionError: xx/MainApplication: Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
......
这个错误一般是值指ar包的打包的jdk版本和启动的jdk版本不一致。
远程服务器本地执行:java -version,版本为1.8
远程命令执行:ssh [email protected] java -version,得到的版本为1.7,
此时就可以很清楚的知道是环境问题导致的两个版本不一致,从而导致远程启动问题。