关键词:银企平台、开机自启、自启动、服务、WinSW(Windows Service Wrapper)
更新日志:
20221107初稿
20221112新增关于补丁更新场景注意事项,支持电子回单代理程序设置为服务(但是还需要手动到回单代理程序网页端启动)
支持:银企平台服务(OSGI服务、TOMCAT服务、前置机代理程序服务)Windows安装设置为服务,并设置为开机自启
注意:电子回单代理程序如果设置为服务,每次更新到需要重装下WinSW
1.问题描述
问题现象、报错信息
银企实施与运维过程中,银企平台支持部署在Linux和Windows操作系统中。但在选择Windows操作系统作为银企平台服务器操作系统时,对于银企平台、电子回单代理程序、前置机代理程序,都是通过命令行方式运行。如何开机自启动呢?
针对一些图形/GUI界面的应用程序一样,比如QQ、火绒等,可以添加为开机启动项。
但是如果是运行命令行方式的程序时,有个笨的方法就是把程序的快捷方式添加到开机启动项中(如:【熊说银企】银企平台程序如何开机自启(Windows系统)-需要登录系统才会启动),但是有两点不方便的地方:
需要登录操作系统才会启动
开机启动后,你会发现,会一直显示CMD窗口(如下图所示),如果银企运维人员误关了CMD窗口,程序关了就会停了
2.原因分析
分析问题出现的可能原因(视情况而定)
其实Windows系统自带后台程序管理的功能,也就是我们经常用到的服务。
但是Windows的服务只有程序的开发者(pick下银企平台开发团队老师)在写程序的时候引用到这个功能,我们才能利用服务来控制程序的启动和关闭。
对于一般的命令行程序来说,没办法利用服务。目前银企平台及相关程序暂不支持设置为服务的方式。
希望银企平台团队老师可以吸收到这边帖子的内容,后续银企平台迭代,可以提供服务启动的方式(针对进阶版用户使用)
3.解决方法
解决思路/操作步骤
我们如何把银企平台程序设置为服务呢?
针对bat、exe等文件设置为服务,我们可以使用bat、nssm等工具将此类文件设置为Windows服务,此处我们介绍使用WinSW这个工具。
WinSW,它就是一个可以将Windows上的任何一个程序注册为服务的工具。同样也可以支持卸载该服务。
支持开源免费使用。
官方介绍:Windows Service Wrapper
WinSW is an executable binary, which can be used to wrap and manage a custom process as a Windows service.
3.1工具下载
下载地址(来源于github):https://github.com/winsw/winsw/releases
上图中涉及到的文件下载地址:
https://github.com/winsw/winsw/releases/download/v3.0.0-alpha.10/WinSW-x64.exe
相关程序源码:
https://github.com/kohsuke/winsw
下载完之后最好把文件改成一个比较短小的名字,例如:WinSW.exe 方便后面输入命令时使用。
3.2修改配置文件
银企平台相关服务的配置文件已存放到本文附件可供自取修改使用
我们需要编写一个和程序同名的XML文件作为WinSW的配置文件。
具体配置文件模板可以参考附件提供的XML配置文件
配置文件说明
*XML配置文件中的绿色字体,主要为解释说明,具体配置时可删除。
具体如何配置详细截止可以参考:
【WinSW】工具介绍 - 腾讯云开发者社区-腾讯云 (tencent.com) 中的
WinSW配置说明(翻译xmlConfigFile.md)
具体配置参数简介
<service> --设置服务id <id>myapp</id> --设置服务名称 一般和id一样 <name>MyApp Service (powered by WinSW)</name> --类似于服务说明、备注> <description>This service is a service created from a sample configuration</description> --这里输入软件的路径,此处建议可以设置执行文件的绝对路径。 <executable>%BASE%\myExecutable.exe</executable> --设置优先事项 <priority></priority> --stoptimeout:停止超时时间,默认“15 sec” <stoptimeout>15 sec</stoptimeout> --是否在停止子进程之前终止父进程,默认true <stopparentprocessfirst>true</stopparentprocessfirst> --Boot:设备驱动程序由操作系统加载程序启动。此值仅对驱动程序服务有效。 --System:设备驱动程序由操作系统初始化过程启动。此值仅对驱动程序服务有效。 --Automatic:自动,服务控制管理器将在系统启动期间自动启动服务。 --Manual:手动,当进程调用StartService方法时,由服务控制管理器启动的服务。 --Disabled:禁用,无法再启动的服务。 --默认值为Automatic <startmode>Automatic</startmode> --指定多长时间内服务应该对SetServiceStatus函数进行下一次调用,否则会被标记为无响应,默认“15 sec” <waithint>15 sec</waithint> --服务两次调用SetServiceStatus函数的间隔时间,默认“1 sec” <sleeptime>1 sec</sleeptime> <log mode=""></log> </service>
比如我设置银企平台服务(ebservice750\ebservice\windows_startup_in_console.bat)
<service> <id>ebg</id> <name>ebg</name> <description>金蝶银企平台osgi</description> <executable>E:\06_ERP\ebservice750\ebservice\windows_startup_in_console.bat</executable> <priority>Normal</priority> <stoptimeout>15 sec</stoptimeout> <stopparentprocessfirst>true</stopparentprocessfirst> <startmode>Automatic</startmode> <waithint>15 sec</waithint> <sleeptime>1 sec</sleeptime> <log mode="append"> <!-- <setting1/><setting2/> --> </log> </service>
设置银企平台对应TOMCAT(ebservice750\apache-tomcat-6.0.20\bin\startup.bat)
<service> <id>ebgtomcat</id> <name>ebgtomcat</name> <description>金蝶银企平台tomcat</description> <executable>E:\06_ERP\ebservice750\apache-tomcat-6.0.20\bin\startup.bat</executable> <priority>Normal</priority> <stoptimeout>15 sec</stoptimeout> <stopparentprocessfirst>true</stopparentprocessfirst> <startmode>Automatic</startmode> <waithint>15 sec</waithint> <sleeptime>1 sec</sleeptime> <log mode="append"> <!-- <setting1/> <setting2/> --> </log> </service>
3.3注册服务
配置文件编写完之后,将配置文件与WinSW.exe放在同一目录中。注意对应WinSW.exe的配置文件名称应该是WinSW.xml。此时,WinSW.exe、WinSW.xml以及你的应用程序应该都是在同一目录中。然后用管理员权限打开一个命令提示符窗口,cd进入到应用程序所在目录,可以通过输入下面的命令来进行控制应用程序对应的服务:
winsw install 安装服务 winsw uninstall 卸载服务 winsw start 开启服务 winsw stop 停止服务 winsw restart 重新启动服务 winsw status 检查服务的当前状态 winsw refresh 刷新服务属性而不是重新安装
此处的winsw要结合自己把下载到的WinSW重命名成什么了来定,比如命名成别的,就是要写被的开头。
此处做下演示示例,比如我把银企平台OSGI和TOMCAT设置为服务自启动
银企平台OSGI
管理员模式打开CMD
银企平台Tomcat
3.4启动服务
此时进入服务界面(WIN+R运行输入services.msc)
浏览器中输入127.0.0.1:5389
即可正常访问,如下图所示
3.5常见问题(待进一步解决)
启动TOMCAT服务时提示:
本地计算机上的 ebgtomcat服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。
不太懂为啥会出现这个,但是TOMCAT时正常
3.6后续相关(待补充)
涉及到银企平台升级补丁、私包时如何处理解决?
银企平台升级时需要手动把此处的服务停止,补丁安装后再手动启动
回单代理程序还需要多一步,上网页端启动
4.应用小结
注意事项;补充说明(视情况而定)
下载WinSW-设置配置文件-CMD安装服务
参考文档
Windows中使用WinSW工具进行服务的安装_qubernet的博客-CSDN博客
WinSW把Windows程序变成服务并且开机自启动!! - 知乎
WinSW.zip(7.48MB)
银企平台WinSW配置文件示例.zip(1.67KB)
推荐阅读