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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java jar包启动命令有多种方式,具体使用哪种方式取决于你的需求和场景。以下是几种常见的启动命令: 1. 使用命令行启动:可以使用命令`java -jar test.jar`来启动一个Java jar包。这种方式会在当前的命令行窗口中执行,并且如果你使用Ctrl+C来退出启动页面,程序将会中断运行。 2. 使用后台运行命令:如果你希望在后台运行启动的进程,可以使用`java -jar test.jar &`来启动。这样可以让程序在后台运行,而你可以继续使用命令行做其他操作。同样地,如果你使用Ctrl+C来退出启动页面,程序也会中断运行。 3. 使用nohup命令:如果你希望在退出启动页面后,程序仍然继续在后台运行,可以使用nohup命令。例如,`nohup java -jar test.jar &`。这样会将程序转为后台运行,并且不会受到Ctrl+C的影响。 需要注意的是,不同的启动命令会有一些细微的差别,你可以根据自己的需求选择适合的方式来启动Java jar包。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [jar包的各种启动方式总结](https://blog.csdn.net/m0_46897923/article/details/127549481)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值