背景

基于Java技术栈开发,由于种种原因运行于Windows操作系统,Java应用打包成jar后,正常为命令行的方式运行。命令行方式容易误关掉,且工具栏显示很多的命令行应用,不易查找,也不便于监控软件监控进程。因此需要将Java应用打包为Windows服务,便于再后台运行,不在显示窗口。

WinSW介绍

WinSW 和Java Service Wrapper一样,WinSW也可以将java的jar程序转为windows服务。Jenkins即使用WinSW转化为windows服务。

  • 配置文件更精简直观
  • 运行更简便
  • 免费开源

使用步骤

下面以platform-server为例说明转化为Windows服务的步骤。

更新文件名

下载WinSW.NET4.exe和sample-allOptions.xml

重命名WinSW.NET4.exe为PlatformServer.exe

重命名sample-allOptions.xml为PlatformServer.xml

完成后如下图所示:

41f78652e93dbd08b6132f50dbbf8c08.png

配置XML文件

<service>
  <id>PlatformServer</id>
  <name>PlatformServer</name>
  <description>X Plan proccess serverice</description>
  <executable>java</executable>
  <arguments>-Xrs -Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m -jar "%BASE%platform-server-0.0.1-SNAPSHOT.jar"</arguments>
  <logmode>rotate</logmode>
  <priority>Normal</priority>
  <stoptimeout>45 sec</stoptimeout>
  <stopparentprocessfirst>false</stopparentprocessfirst>
  <startmode>Automatic</startmode>
   <!--
    <depend>Eventlog</depend>
    <depend>W32Time</depend>
    -->
  <logpath>%BASE%logs</logpath>
  <waithint>60 sec</waithint>
  <sleeptime>10 sec</sleeptime>
</service>

运行

  • 安装服务

以管理员模式打开控制台(如果不以管理员模式打开,可能报AssessDenied异常),然后输入命令:

PlatformServer.exe install

使用命令net start platformserver 启动即可

516ec8310065986993e3ca91f0317bf7.png

services.msc可以查看服务状态

dd2a164b7d0070fe43146a414add1cc9.png
  • 卸载服务

PlatformServer.exe uninstall

常用命令

    • start 启动服务
    • stop 停用服务
    • restart 重启服务
    • status 状态

定制LOGO

使用winrun4j替换logo

RCEDIT64 /I PlatformServer.exe 1040.ico

完成后入下图所示:

01bfed057d7b2e8c8b5847e075e8a79d.png

Zoopkeeper服务化

Zoopkeeper bin目录脚本zkEnv用于设置相关变量、zkServer用于启动应用,相关配置如下:

<service>
  <id>zookeeper</id>
  <name>zookeeper</name>
  <description>zookeeper serverice</description>
  <env name="ZOOKEEPER_HOME" value="%BASE%"/>
  <env name="ZOOCFGDIR" value="%BASE%conf"/>
  <env name="ZOO_LOG_DIR" value="%BASE%logs"/>
  <env name="ZOO_LOG4J_PROP" value="INFO,CONSOLE"/>
  <env name="CLASSPATH" value="%BASE%*;%BASE%lib*;%ZOOCFGDIR%"/>
  <env name="ZOOCFG" value="%ZOOCFGDIR%zoo.cfg"/>
  <env name="ZOOMAIN" value="org.apache.zookeeper.server.quorum.QuorumPeerMain"/>

  <executable>java</executable>
  <arguments>-Dzookeeper.log.dir="%ZOO_LOG_DIR%" -Dzookeeper.root.logger="%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%"</arguments>
  <logmode>rotate</logmode>
  <priority>Normal</priority>
  <stoptimeout>45 sec</stoptimeout>
  <stopparentprocessfirst>false</stopparentprocessfirst>
  <startmode>Automatic</startmode>
  <logpath>%BASE%logs</logpath>
  <waithint>60 sec</waithint>
  <sleeptime>10 sec</sleeptime>
</service>

参考资料

  • 说明文档
kohsuke/winsw​github.com
da239f1e10b5860ce8df9770b6365e10.png
  • 下载地址
https://github.com/kohsuke/winsw/releases​github.com

最后喜欢本篇文章或者对您有帮助,请点赞或者关注,您的点赞和关注是作者持续更新的动力。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐