Winsw将jar包部署为windows服务
1. 下载Winsw
https://github.com/winsw/winsw/releases
下载winsw官网上的xml文件和.exe文件

2. 编辑配置文件
创建一个文件夹demo,将所需要转换的jar包,和这两个文件放在一起,并且将.exe的文件名修改和.xml文件一样,比如test.exe和test.xml
xml的可选项
<!--
这是Windows服务包装器的一个配置示例。
此配置文件应放在WinSW.exe同目录,名称应相同。
例如,对于myapp.exe,配置文件名应为myapp.xml。
更多信息:https://github.com/kohsuke/winsw/blob/master/doc/xmlconfigfile.md
-->
<configuration>
<!--
SECTION: 必填项
-->
<!-- 服务ID,在windows系统中必须唯一 -->
<id>myapp</id>
<!-- 服务显示名称,只能英文和数字 -->
<name>MyApp Service (powered by WinSW)</name>
<!-- 服务描述,只能英文和数字 -->
<description>This service is a service cratead from a sample configuration</description>
<!-- 启动可执行文件的路径 -->
<executable>%BASE%\myExecutable.exe</executable>
<!--
SECTION: 安装
这些选项仅在安装时有效。修改配置后,必须重新安装服务才能生效。
-->
<!--
OPTION: serviceaccount
定义运行服务的账号。
-->
<!--
<serviceaccount>
<domain>YOURDOMAIN</domain>
<user>useraccount</user>
<password>Pa55w0rd</password>
<allowservicelogon>true</allowservicelogon>
</serviceaccount>
-->
<!--
OPTION: onfailure
定义一系列操作,如果托管的可执行文件失败,则顺序执行这些操作。
支持的操作:restart,reboot,none
-->
<!--
<onfailure action="restart" delay="10 sec"/>
<onfailure action="restart" delay="20 sec"/>
<onfailure action="reboot" />
-->
<!--
OPTION: resetfailure
windows服务重置故障状态的时间。
默认值 1 day
-->
<!--
<resetfailure>1 hour</resetfailure>
-->
<!--
SECTION: 执行管理配置
-->
<!--
OPTION: arguments
传递给可执行文件的参数。
-->
<!--
<arguments>-classpath c:\cygwin\home\kohsuke\ws\hello-world\out\production\hello-world test.Main</arguments>
-->
<!--
OPTION: startarguments
可执行文件启动参数。
如果配置,则覆盖"arguments"
-->
<!--
<startarguments></startarguments>
-->
<!--
OPTION: workingdirectory
如果指定,则设置可执行文件的默认工作目录。
默认值:服务包装的可执行文件的目录
-->
<!--
<workingdirectory>C:\myApp\work</workingdirectory>
-->
<!--
OPTION: priority
所需的进程优先级。
可设置的值:Normal, Idle, High, RealTime, BelowNormal, AboveNormal
默认值:Normal
-->
<priority>Normal</priority>
<!--
OPTION: stoptimeout
强制终止可执行文件之前,尝试正常关闭的等待时间。
默认值:15 seconds
-->
<stoptimeout>15 sec</stoptimeout>
<!--
OPTION: stopparentprocessfirst
如果设置为true,在停止子进程之前终止父进程。
默认值:false
-->
<stopparentprocessfirst>false</stopparentprocessfirst>
<!--
OPTION: stopexecutable
执行关闭服务的可执行文件路径。
只有配置了"stoparguments"时,才使用此配置。如果没有则用"executable"关闭服务
-->
<!--
<stopexecutable>%BASE%\stop.exe</stopexecutable>
-->
<!--
OPTION: stoparguments
终止服务时,传递给"stopexecutable"的附加参数
此选项还允许通过停止可执行文件终止可执行文件
-->
<!--
<stoparguments>-stop true</stoparguments>
-->
<!--
SECTION: 服务管理
-->
<!--
OPTION: startmode
定义服务的启动模式
支持的模式:Automatic, Manual, Boot, System (latter ones are supported for driver services only)
默认模式:Automatic
-->
<startmode>Automatic</startmode>
<!--
OPTION: delayedAutoStart
如果在"startmode"配置了"Automatic",则启用延迟自动启动。
请参阅Winsw文档以获取有关支持的平台版本和限制的信息。
-->
<!--
<delayedAutoStart/>
-->
<!--
OPTION: depend
在本服务启动之前启动的服务。
-->
<!--
<depend>Eventlog</depend>
<depend>W32Time</depend>
-->
<!--
OPTION: waithint
挂起停止操作所需的时间
在指定的时间段过去之前,服务应该下次调用setServiceStatus函数。
否则服务将被标记为无响应
默认值:15 seconds
-->
<waithint>15 sec</waithint>
<!--
OPTION: sleeptime
服务下次调用setServiceStatus函数之前的时间。
不要超过"waithint"。建议间隔是"waithint"的十分之一,但不小于1秒,也不大于10秒。
默认值:1 second
-->
<sleeptime>1 sec</sleeptime>
<!--
OPTION: interactive
指示服务可以与桌面交互。
-->
<!--
<interactive/>
-->
<!--
SECTION: 日志记录
-->
<!--
OPTION: logpath
为服务包装程序生成的所有日志设置自定义日志目录。
默认值:包含执行器的目录
-->
<!--
<logpath>%BASE%\logs</logpath>
-->
<!--
OPTION: log
为可执行文件生成的日志定义日志记录模式。
支持的模式:
* append - 追加到现有日志
* none - 不保存日志
* reset - 启动时擦除日志
* roll - 根据大小自动循环分割日志
* roll-by-time - 根据日期循环分割日志
默认模式: append
每种模式都有不同的设置。https://github.com/kohsuke/winsw/blob/master/doc/loggingAndErrorReporting.md
-->
<log mode="append">
<!--
<setting1/>
<setting2/>
-->
</log>
<!--
SECTION: 环境设置
-->
<!--
OPTION: env
设置或重写环境变量。
顶层可能配置了多个条目。
-->
<!--
<env name="MY_TOOL_HOME" value="C:\etc\tools\myTool" />
<env name="LM_LICENSE_FILE" value="host1;host2" />
-->
<!--
OPTION: download
启动前由包装器执行的下载列表。
-->
<!--
<download from="http://www.google.com/" to="%BASE%\index.html" />
下载并在出现错误时使服务启动失败:
<download from="http://www.nosuchhostexists.com/" to="%BASE%\dummy.html" failOnError="true"/>
由于连接未加密而导致基本身份验证不安全的示例:
<download from="http://example.com/some.dat" to="%BASE%\some.dat"
auth="basic" unsecureAuth=“true”
username="aUser" password=“aPassw0rd" />
通过HTTPS安全基本身份验证
<download from="https://example.com/some.dat" to="%BASE%\some.dat"
auth="basic" username="aUser" password="aPassw0rd" />
当目标服务器和客户端是同一域的成员,并且客户端域属于具有信任的域时,安全身份验证:
<download from="https://example.com/some.dat" to="%BASE%\some.dat" auth="sspi" />
-->
<!--
SECTION: 其他选项
-->
<!--
OPTION: beeponshutdown
指示服务在关闭时(如果操作系统支持)应发出嘟嘟声。
-->
<!--
<beeponshutdown/>
-->
<!--
SECTION: 扩展
此配置部分允许指定自定义扩展。
更多信息请访问:https://github.com/kohsuke/winsw/blob/master/doc/extensions/extensions.md
-->
<!--
<extensions>
Extension 1: id values must be unique
<extension enabled="true" id="extension1" className="winsw.Plugins.SharedDirectoryMapper.SharedDirectoryMapper">
<mapping>
<map enabled="false" label="N:" uncpath="\\UNC"/>
<map enabled="false" label="M:" uncpath="\\UNC2"/>
</mapping>
</extension>
...
</extensions>
-->
</configuration>
3.示例xml文件
<service>
<id>demo</id>
<name>demo</name>
<description>This is HelloWorld service.</description>
<executable>D:\jdk1.8.0_202\bin\java.exe</executable>
<arguments>-jar D:\demo\demo.jar</arguments>
<startmode>Automatic</startmode>
<logpath>%BASE%\log</logpath>
<logmode>rotate</logmode>
</service>
# 直接使用系统变量的写法
<service>
<id>demo</id>
<name>demo</name>
<description>winsw将jar包注册为windows服务demo</description>
<env name="JAVA_HOME" value="%JAVA_HOME%"/>
<executable>java</executable>
<arguments>-jar D:\demo\demo.jar</arguments>
<startmode>Automatic</startmode>
<logpath>%BASE%\log</logpath>
<logmode>rotate</logmode>
</service>
name与description是注册到windows服务后的名称与描述,
env配置读取windows配置的java环境变量,
executable与arguments里面的内容拼接起来就是我们平常使用的启动jar包的命令,
arguments中配置各种启动参数,jar包路径使用绝对路径,相对路径需要配置环境变量像JAVA_HOME那样使用env标签读取,
startmode设置为windows开机自启动,如果不需要开机自启可以去掉这个标签,
logpath设置日志输出路径,这里也是使用绝对路径输出到logs文件夹,
log标签内配置日志模式
4. 运行test.exe文件
# 在命令行窗口执行如下命令
test.exe install
注:图示使用的服务是demo1,供展示

5.删除服务
使用管理员权限打开命令行窗口,执行如下命令
sc delete demo
6.设置程序启动
上述步骤是设置程序开机自启动,但是服务未启动,结合bat文件来实现
# demo.bat
@echo.服务启动......
@echo off
@sc create demo binPath= "D:\demo\test.exe"
@net start demo
@sc config demo start= AUTO
@echo off
@echo.启动完毕!
@pause
7.汇总
若是有第6步操作,则直接执行demo.bat文件即可,就不用再执行test.exe install这一步了
这样一来就实现了windows系统下把jar程序注册成服务,服务开启,并且服务开机自启动等。
8.日志
由配置文件可知,日志是在当前目录下的log文件夹下,里面有三个log文件

test.wrapper.log是winsw程序日志
test.out.log 是jar程序本身运行的日志
9.补充
服务重启的方式:
第一种是通过命令行的方式:
net stop mysql
net start mysql
第二种是服务功能
windows+R, 输入: services.msc,找到对应的服务来操作
Winsw将jar包部署为windows服务的更多相关文章
- Java Service Wrapper将jar包安装成Windows服务
刚接触java,第一次使用Java开发windows服务,也是刚不久看了SSM框架 简直也是一头雾水,不过只要用心理解,其实很简单,下面有详细的步骤,包学包会 在windows上运行jar包,需要在工 ...
- 通过winsw将jar包做成window后台服务运行
第一步:下载Winsw地址 https://github.com/kohsuke/winsw/releases 第二步: 将下载好的sample-minimal.xml和WinSW.NET4.exe ...
- 使用winsw将spring-boot jar包注册成windows服务
背景:最近的项目中使用spring-boot, https://github.com/kohsuke/winsw/releases <service> <id>YJPSS< ...
- 把jar包部署为linux服务
一直未配置成功,直到放弃后reboot了下,才直到错的不是自己的配置,而是自己不懂 1.在touch /etc/rc.d/init.d/tl_c_cons_service(创建新文件) 2.vi /e ...
- windows环境jar包部署到linux服务器,一键操作
背景: windows系统下生成的jar包通过FTP上传到linux服务器,然后通过XShell进行jar包的发布,这样反复了几个月后,开发阶段需要频繁更新包的部署.个人觉得很繁琐,想一键式把这个工作 ...
- 在 CentOS7 上将自定义的 jar 包注册为 linux 服务 service
在 CentOS7 上将自定义的 jar 包注册为 linux 服务 service 1.在 /etc/rc.d/init.d/ 目录下创建一个名字和服务名完全相同的 shell 脚本文件 joyup ...
- Java的jar文件安装成windows 服务
Java的jar文件安装成windows 服务: 1.下载:nssm,复制到jar文件目录下 2. jar文件目录下创建bat文件[run.bat],内容为[java -jar 文件名.jar] 3. ...
- 使用NSSM把.Net Core部署至 Windows 服务
为什么部署至Windows Services 在很多情况下,很少会把.Net Core项目部署至Windows服务中,特别是Asp.net Core就更少了.一般情况下,Asp.net Core会部署 ...
- springboot之jar包部署步骤
eclipse中: 1.单击整个项目 run as - maven clean - maven install 2.找到项目所在的路径 找到所有的jar包 3.把jar包放到linux对应的文件夹 l ...
随机推荐
- CF1701A Grass Field 题解
根据题意,给定一个 \(2\times2\) 的仅包含 \(0\) 和 \(1\) 的二维数组.定义一个操作,每次可以选择一行和一列将其变成 \(0\),求最小操作次数. 思路:根据枚举可得共有 \( ...
- 洛谷 P5627 题解
题意 Link 求 \[\sum_{i=1}^{2^n}\log_2\left(\prod_{j=1}^i\operatorname{lowbit}(j)\right) \] \(n\le 2^{64 ...
- Pref 社论
目录 题面 题解 算法 1 算法 2 算法 3(标答) 代码 算法 1 20pts(by jijidawang) 40pts(by Rolling_Star) 算法 2 算法 3 题面 一个长度为 \ ...
- 使用云服务器从0开始搭建云端Jupyter Lab|Notebook
0.购买云服务器 购买服务器我只推荐硅云,因为香港服务器免备案!而且25岁以下仅需10元每月,至少可买3年!每年享有多次原价续费机会,可补价升级配置. 硅云服务器首页:https://www.vpso ...
- CSS样式快速入门
CSS样式快速入门 前言 前端基础的博客主要分为HTML.CSS和JavaScript,本类博客主要用于记录博主的学习过程和分享学习经验,由于博主学识浅薄,经验不足,难免会出现错误,欢迎大家提出问题. ...
- 0202年,您真的需要Thrift这样一个RPC微服务框架来拯救一下传统HTTP接口(api)了
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_104 目前市面上类似Django的drf框架基于json的http接口解决方案大行其道,人们也热衷于在接口不多.系统与系统交互较少 ...
- 把酒言欢话聊天,基于Vue3.0+Tornado6.1+Redis发布订阅(pubsub)模式打造异步非阻塞(aioredis)实时(websocket)通信聊天系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_202 "表达欲"是人类成长史上的强大"源动力",恩格斯早就直截了当地指出,处在蒙昧时代即低 ...
- 分享一款免费OPC UA服务器
OPC UA基于OPC基金会提供的新一代技术,提供安全,可靠和独立于厂商的,实现原始数据和预处理的信息从制造层级到生产计划或ERP层级的传输.通过OPC UA,所有需要的信息在任何时间,任何地点对每个 ...
- k8s暴露集群内和集群外服务的方法
集群内服务 一般 pod 都是根据 service 资源来进行集群内的暴露,因为 k8s 在 pod 启动前就已经给调度节点上的 pod 分配好 ip 地址了,因此我们并不能提前知道提供服务的 pod ...
- RocketMQ 详解系列
什么是RocketMQ RocketMQ作为一款纯java.分布式.队列模型的开源消息中间件,支持事务消息.顺序消息.批量消息.定时消息.消息回溯等.主要功能是异步解耦和流量削峰:. 常见的MQ主要有 ...