当前位置: 首页 > news >正文

Java服务后台启动问题总结

Java服务后台启动问题总结

问题背景:

插件部署,由于同步任务和VB请求业务方接口都是采用java语言编写,在实际部署java服务到仓库4.35服务器时,需要编写.bat脚本启动jar包服务,并设置后台运行。

  • .bat脚本:
start D:/cq_ck/FimSys/jre32/jre32/bin/java -jar FIMSys.jar

注意:这里直接指定jre运行的原因是,在4.35服务器安装32位的JDK1.8时,会出现报错以下报错:".exe文件不是有效的windows32位应用程序",所以通过在本地安装好32位jdk1.8,并将jre复制到4.35环境,并指定jre运行环境启动jar包。

  • .vbs脚本如下:
set ws=WScript.CreateObject("WScript.Shell")
ws.Run"D:\cq_ck\FimSys\start.bat /start",0

将start.vbs脚本放置到程序启动页,这样在服务重启时,可以自动启动服务。

image-20210812133448893

当服务出现如下命令框时即为成功

image.png

​ 但是在实际生产中,出现VB调不了java接口问题,经过问题定位,找到以下原因:由于登陆4.35服务器使用账户是公司域账户,账户会在规定时间后自动注销,因此上面启动的服务也会挂掉。

所以需要把java服务做成windows服务后台运行,即使当前域账户注销,也不会影响服务运行。

按照以上思路,将java服务做成Windows服务后台运行的方式有以下几种:

  1. 将.bat文件做成windows服务
  2. 将jar包做成windows服务
  3. 将war部署到Tomcat并将其作为windows服务

方式一、将.bat文件做成windows服务

.bat文件注册成windows服务可以从下两种方式入手:

  1. 直接把.bat文件注册成windows服务
  2. 把bat文件转成.exe后注册成windows服务

这两种方式的实现基本一致,只不过第二种方式需要增加一步将.bat文件注册成.exe的过程,下面以第二种方式进行记录过程。

1.1 将.bat文件转换成.exe包

需要使用工具:Bat_To_Exe工具包,下载后打开软件,选择需要转换的.bat文件,进行编译得到.exe包

image-20210812141405697

转换后得到.exe包

image-20210812141950881

1.1 instsrv.exe工具注册服务

注意:这里需要使用administrator权限

执行下面代码

instsrv start D:\cq_ck\FimSys\start.bat

1.2 注册表编辑器添加.exe路径信息

cmd --> regedit --> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\fimStart.exe

需要新增文件及内容:

项:Parameters
字符串:Application  D:\cq_ck\FimSys
字符串:AppDirectory  D:\cq_ck\FimSys\fimStart.exe
字符串:AppParameters

image-20210812142215572

1.3 进入服务并设置启动方式

image-20210812142327179

1.4 关闭及卸载服务

执行如下命令

instsrv fimStart remove

image-20210812142532391

出现问题总结:

在服务器上会发生报错:"服务启动失败:错误码1053,服务没有及时响应启动或控制请求"

针对以上问题,通过查阅资料,windows服务默认启动超时时间为30s,但是有些服务的启动时间可能会超过30s,这是就需要修改注册表来解决这个问题,注册表地址为:

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/ServicesPipeTimeout,ServicesPipeTimeout可能不存在,如果不存在需要自己手动添加。类型为DWORD,单位是毫秒。

由于该设置需要重启服务器,但由于4.35服务器的特殊性不能重启,这里没有继续进行测试,但是可以为以后工作提供一种思路。

image-20210812144110642

方式二、将jar包做成windows服务

由于方式一将.bat文件注册成windows服务没有走通,这里采用第二种方式,使用winSW.exe注册jar包为windows服务,具体方式如下:

2.1 下载winSW-x86.exe应用程序

GitHub地址:https://github.com/winsw/winsw/releases

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6lFojUQI-1628769608213)(https://gitee.com/wang-sy-0924/cloud-pic-go/raw/master/img/83JV(~(B)]IGPG(7Q)C%Y}9E.png)

2.2 编写XML文件

<service>
    <id>FIMSysTest</id>
    <name>FIMSysTest</name>
    <description>This service runs FIMSysTest system.</description>
    <executable>E:/cq_ck/FimSys/jre32/jre32/bin/java</executable>
    <arguments>-jar FIMSysTest.jar</arguments>
    <log mode="roll" />
    <onfailure action="restart" />
</service>

2.3 注册服务

修改winSW-x86.exe名称为FIMSys.exe,并将FIMSys.jar、FIMSys.xml、FIMSys.exe放置在同一级目录,使用如下命令注册服务

FIMSysTest install

image-20210812154116043

image-20210812154722549

出现问题总结:

这种当时可以将jar包做成windows服务,但是在4.35服务器进行部署时,在执行FIMSys install出现报错:".exe文件不是有效的windows32位应用程序"

这个问题与不能手动安装jdk情况一样,检查了版本下载exe版本号,未发现问题,但是在本地执行可以成功,网上有解决方案是可能病毒原因,需要删除.exe注册表等,由于此服务器的特殊性,没有进行以上操作。

方式三、将war部署到Tomcat并设置windows服务

由于服务器环境比较老,windows2003无法手动安装JDK1.8,这里使用免安装32位JDK和免安装版Tomcat8.5,由于服务器中装有jdk1.4,需要设置path环境变量将java version设置为1.8版本。

另外,需要将java服务打成war包部署,由于war包部署时,默认访问需要加上war包名称,但是由于VB服务中, 已经将请求的地址写死,不带服务名称,此时需要修改server.xml,添加如下配置:

  1. appBase=""

  2. <Context path="" docBase="D:\cq_ck\apache-tomcat-8.5.69-windows-x86\apache-tomcat-8.5.69\webapps\FIMSys" debug="0" reloadable="true" crossContext="true"/>

    docBase:设置war包路径,FIMSys为war包名称

      <!--<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">-->
			 <Host name="localhost"  appBase=""
            unpackWARs="true" autoDeploy="true">
			
			<Context path="" docBase="D:\cq_ck\apache-tomcat-8.5.69-windows-x86\apache-tomcat-8.5.69\webapps\FIMSys" debug="0" reloadable="true" crossContext="true"/>

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

image-20210812195908043

后台运行成功,大功告成!!!

相关文章:

  • springboot自定义starter并上传至公网调用
  • 正向代理、反向代理、负载均衡
  • 64位linux编译32位程序
  • Python tips: 什么是*args和**kwargs?
  • 关于SAP UI5数据绑定我的一些原创内容
  • 安卓微信视频最佳实践
  • 触摸事件分发核心机制优化吸收
  • 异常机制详解
  • oracle 10g 搭建备库以及一次DG GAP的处理情况
  • 智能分析---表格的智能洞察
  • 线性代数学习
  • [VSCode] Shortcuts
  • Cannot retrieve metalink for repository: epel 错误解决
  • gitlab4.0_安装
  • 前端知识由零开始总结工具书
  • 【前端学习】-粗谈选择器
  • Computed property XXX was assigned to but it has no setter
  • JavaScript 基础知识 - 入门篇(一)
  • Java教程_软件开发基础
  • Laravel Telescope:优雅的应用调试工具
  • php ci框架整合银盛支付
  • Vim 折腾记
  • XForms - 更强大的Form
  • 回流、重绘及其优化
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 简单数学运算程序(不定期更新)
  • 跨域
  • 聊一聊前端的监控
  • 扑朔迷离的属性和特性【彻底弄清】
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 协程
  • 因为阿里,他们成了“杭漂”
  • ionic入门之数据绑定显示-1
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • #HarmonyOS:基础语法
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #控制台大学课堂点名问题_课堂随机点名
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (¥1011)-(一千零一拾一元整)输出
  • (C语言)共用体union的用法举例
  • (Note)C++中的继承方式
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (排序详解之 堆排序)
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (转)linux下的时间函数使用
  • .net 程序发生了一个不可捕获的异常
  • .net 托管代码与非托管代码
  • .net(C#)中String.Format如何使用
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [BZOJ] 2427: [HAOI2010]软件安装
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [CSS]CSS 字体属性
  • [FTP]pureftp部署和优化
  • [Java、Android面试]_10_Java中==与equal()方法的区别?重写equal()方法?