20200226 windows下JavaService注册成功启动失败的原因

问题

最近收到一个任务,是让我处理一个问题:一个windows服务器上的java jar程序跑不起来。

结果

先说结果吧。最终发现是JavaService的版本和jdk版本不一致导致的。JavaService用的是32位版本,而jdk用的是64位版。大家在下载JavaService的时候要注意JavaService-2.0.10.zip对应的是32位版本而JavaService_2_0_10-amd64.zip对应的是64位版本。

由于另一台能成功运行服务器用的也是32位的,为了保持一致,我重新装了32位版的jdk。重装之后再次执行启动脚本,还是失败(可能是因为重装了jdk吧),重启服务器就能启动java jar服务了。

所以如果有朋友有遇到类似服务启动不了的问题,可以参考下下面几条建议:
1、检查启动脚本写的有没有问题;
2、查看java环境变量是否配置好;
3、确认JavaSevice和jdk版本是否一致;
4、重装jdk或JavaService后重启服务器再试一次;

过程

此前也处理过一次windows服务器上的jar程序启动不成功的问题,当时发现是因为装完jdk后环境变量没配置导致的。配置好环境变量后,一切就正常了。因为不是我跟的项目就没去深究了。

这次另一台服务器又出现类似的问题,因为之前的也是我搞好的,于是这次自然而然也让我来处理。不过貌似工作至今我跟的项目生产环境都用的是linux服务器。linux下用的是nohup java -jar指令。windows下怎么启动jar程序,还真不知道。

在这个windows服务器上看到里面有几个文件,一个是JavaService.exe,一个是install.bat,一个是uninstall.bat,以及一个jar程序。于是查看install.bat脚本,内容类似这样:

JavaService -install myservice "C:\Program Files\Java\jre7\bin\client\jvm.dll" -Djava.class.path="C:\javaapp\xxxx.jar" -start com.xxx.http.HttpServer  -description "xxxx同步服务"
net start myservice
pause

大概就是个启动jar程序的脚本吧。于是百度查了一下windows下部署java jar程序的方法。使用JavaService是其中一种方法。

看了好几篇文章,了解了大致的用法。这里做个简单的记录:
1、-install xxx,这里表示你要发布的服务的名字;
2、紧接着"C:\Program Files\Java\jre7\bin\client\jvm.dll"是所需要使用的jre;
3、-Djava.class.path用来指明要运行的jar包;
4、-start 指明启动类;
5、-description是描述,即备注;
6、net start xxx,用来启动服务;

也确认了上面的配置参数没有问题。可是还是无法启动服务。卡壳了很久。

想起之前因为环境变量配置失败的那个windows jar服务,于是了一下,发现配置都是类似的。也自己写了一个简单的jar程序,在两台服务器上跑,一台正常运行,另一台还是无法启动服务。这说明不是jar程序的问题。头大。。。

突然看到一篇文章说可能是JavaService和JDK的版本不一致。于是对比了两台服务器上的JavaService,发现是一样的。而JDK,一个装的是32位,另一台装的是64位。有一说一,我下载了64位版的JavaService还是不行(但是我没试过重启服务器)。于是我想应该保持两台服务器一致才对,于是把jdk卸了重装改成32位的,尝试启动服务结果还是没成功。于是重启服务器再重试就成功了。

最后附上一张让我如释重负的图(启动服务成功的图):
20200226 windows下JavaService注册成功启动失败的原因_第1张图片
我想,下次再遇到类似的问题,应该就不是问题了。毕竟这次也学习了一次了。

参考文章

1、使用Java编写部署windows服务
2、JavaSercice下载链接
3、JavaService.exe注册的windows服务无法启动问题

你可能感兴趣的:(工作总结,记录,java-se)