背景:
最近在写的一个web系统自动更新服务里面需要调用外部一个jar来完成应用的文件更新。
更新服务本身是一个使用springboot开发的web项目。
由于要保证更新服务本身能够跟随操作系统自动启动,所以使用了procrun来部署windows服务。
问题:
部署成服务后,启动服务,执行更新操作
java -jar %1/../ext/upgrade.jar update %1 >> %1/../upgrade.log
发现upgrade.log文件生成了,但是没有任何内容,并且更新操作未执行。
分析:
1.怀疑是服务的问题,于是分别使用idea的debug方式和直接在命令行启动发现均能够正常将日志输出到upgrade.log,所以程序本身没有问题。
2.既然程序本身没有问题,那么剩下的只能是部署服务导致的问题。然而javaservice本身只是做了一个启动器的作用,那么问题肯定不在javaservice上。于是怀疑是不是用户的问题,难道是用户权限的问题?
3.打开任务管理器查看果然服务是使用SYSTEM启动的,但是想一想SYSTEM权限应该大于当前的用户的权限,所以应该不是权限的问题。
4.然后修改脚本一下,查看环境变量,查看upgrade.log内容,发现果然没有JAVA环境变量。想起来原来我配置的java环境变量是配置在用户变量上的,没有配置在系统变量。
echo %PATH% >> %1/../upgrade.log
解决:
修改系统环境变量后,果然执行成功,并输出日志。比较无语的是没有这个可执行程序竟然没有错误信息输出,导致问题排查起来相当麻烦。。看来错误信息的输出真是非常重要