winsw使用——将Nginx和Jar包注册到WIN服务

本文介绍了如何利用winsw将Nginx和Java Jar包注册为Windows服务。首先,详细解释了winsw的作用和配置方法,接着提供了注册Nginx服务的步骤,包括winsw重命名、配置文件设置和安装服务。然后,阐述了注册Jar包到服务的过程,涉及winsw的复制、XML配置文件创建和安装命令的执行。

1.winsw下载

Windows Service Wrapper是一个可执行二进制文件,可用于包装和管理作为Windows服务的自定义进程。下载安装包后,您可以将 WinSW.exe 重命名为任何名称,例如 MyService.exe 。接下来您可以创建Myservice.xml文件进行服务配置。最后 MyService.exe install安装到服务即可。

下载地址1: https://github.com/winsw/winsw/releases
下载地址2: https://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/
文档配置说明:https://github.com/winsw/winsw/blob/v3/docs/xml-config-file.md

下载地址1截图(这里可以选择对应.NET版本,老系统选.NET2,新系统选.NET4)
在这里插入图片描述

下载地址2截图
在这里插入图片描述

2.注册Nginx到win服务

2.1 首先将下载的winsw下并改名

在这里插入图片描述

2.2 nginx-service.exe.config配置

创建config文件,配置固定的,直接用

<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727" />
    <supportedRuntime version="v4.0" />
  </startup>
  <runtime>
    <generatePublisherEvidence enabled="false"/> 
  </runtime>
</configuration>

2.3 nginx-service.xml配置

创建xml文件,配置根据文件路径或名称灵活修改

<service>
  <!-- 唯一服务ID -->
  <id>Nginx</id>
  <!-- 显示服务的名称 -->
  <name>Nginx Service</name>
  <!-- 服务描述 -->
  <description>High Performance Nginx Service</description>
  <!-- 日志路径 -->
  <logpath>D:\openresty\logs</logpath>
  <!-- 日志模式-->
  <log mode="roll-by-size">
    <sizeThreshold>10240</sizeThreshold>
    <keepFiles>8</keepFiles>
  </log>
  <!-- 可执行文件的命令 -->
  <executable>D:\openresty\nginx.exe</executable>
  <!-- 启动参数 -->
  <startarguments>-p D:\openresty</startarguments>
  <!-- 停止可执行文件的命令 -->
  <stopexecutable>D:\openresty\nginx.exe</stopexecutable>
  <!-- 停止参数 -->
  <stoparguments>-p D:\openresty -s stop</stoparguments>
</service>

2.4 nginx-service安装到服务

当前目录下输入cmd命令:nginx-service.exe install

3.注册Jar包到win服务

当前有一jar包,端口为8088,现在要将其注册到服务
在这里插入图片描述
start.bat文件:

java -jar test.jar

stop.bat文件:

@echo off
title 关闭某一端口
set port=8088
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (taskkill /f /pid %%m)
pause

接下来就是三步走(没必要像nginx那样编写config文件)

3.1 复制winsw文件并改名

将winsw改名为test-service.exe
在这里插入图片描述

3.2 创建xml配置文件

在这里插入图片描述

<service>
  <id>Test</id>
  <name>Test Service</name>
  <description>Test Jar</description>
  <executable>C:\Users\Administrator\Desktop\test\start.bat</executable>
  <stopexecutable>C:\Users\Administrator\Desktop\test\stop.bat</stopexecutable>
</service>

3.3 执行安装命令

#服务安装
test-service.exe install
#启动服务
net start test
#关闭服务
net stop test

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果要卸载服务,输入sc delete 服务ID
在这里插入图片描述
在这里插入图片描述

4. WinSW 配置文件 模式说明

WinSW(Windows Service Wrapper)是一个开源工具,用于将任意可执行文件(exe、jar、bat 等)包装成 Windows 服务。配置文件为 XML 格式(通常命名为 your-service.xml),所有参数都在 <service> 根节点下(注意:不是 <configuration>)。

以下是 WinSW 3.x 版本的完整参数列表,按功能分类整理。


4. 1 基本信息

参数类型必填默认值说明示例
<id>字符串服务唯一标识符(用于 sc.exe 和注册表)<id>myapp</id>
<name>字符串服务显示名称(在服务管理器中显示)<name>My Spring Boot App</name>
<description>字符串服务描述信息<description>XX管理系统</description>

4. 2 启动命令

参数类型必填默认值说明示例
<executable>字符串要运行的可执行文件路径(支持环境变量)<executable>java.exe</executable>
<arguments>字符串传递给可执行文件的参数<arguments>-jar app.jar --port=8080</arguments>
<workingdirectory>路径%BASE%工作目录(服务启动时的当前目录)<workingdirectory>C:\myapp</workingdirectory>
<startarguments>字符串<arguments>启动时的额外参数(一般不用)<startarguments>--debug</startarguments>

4. 3 停止命令

参数类型必填默认值说明示例
<stopexecutable>字符串停止服务时执行的程序(可选)<stopexecutable>cmd</stopexecutable>
<stoparguments>字符串停止程序的参数<stoparguments>/c stop.bat</stoparguments>
<stoptimeout>时间15 sec停止超时时间(超时后强制终止)<stoptimeout>30 sec</stoptimeout>

4. 4 日志配置

参数类型默认值说明示例
<logmode>字符串rotate日志模式:
none - 完全禁用文件日志(stdout/stderr 被丢弃)⚠️
append - 追加到单个日志文件
rotate - 按大小滚动(推荐)
roll-by-size - 同 rotate
roll-by-time - 按时间滚动
<logmode>rotate</logmode>
<logpath>路径%BASE%\logs日志文件保存路径<logpath>C:\logs</logpath>
<log>块元素新版日志配置(推荐)见下方示例
日志配置示例
<!-- 推荐:按大小滚动 -->
<log mode="roll-by-size">
  <sizeThreshold>10240</sizeThreshold>  <!-- 单位:KB,10MB -->
  <keepFiles>8</keepFiles>               <!-- 保留 8 个历史文件 -->
</log>

<!-- 按时间滚动 -->
<log mode="roll-by-time">
  <period>1</period>           <!-- 滚动周期(天) -->
  <pattern>yyyy-MM-dd</pattern> <!-- 日志文件名日期格式 -->
</log>

<!-- 完全禁用(不推荐用于生产环境) -->
<log mode="none"/>

⚠️ 关于 <logmode>none</logmode>

  • 丢弃所有输出,无法排查问题
  • 适用于无需调试的稳定服务程序自带日志功能
  • 生产环境建议使用 roll-by-size 并合理设置保留文件数

4. 5 环境变量

参数类型说明示例
<env>块元素设置环境变量(可配置多个)<env name="JAVA_HOME" value="C:\jdk"/>
<env name="PATH" value="%PATH%;C:\tools"/>
<env name="SPRING_PROFILES_ACTIVE" value="prod"/>

4. 6 启动模式

参数类型默认值说明示例
<startmode>字符串Automatic服务启动类型:
Automatic - 自动启动
Manual - 手动启动
Disabled - 禁用
<startmode>Automatic</startmode>
<delayedAutoStart>布尔false是否延迟自动启动(减少启动冲突)<delayedAutoStart>true</delayedAutoStart>

4. 7 失败恢复

参数类型说明示例
<onfailure>块元素服务失败时的动作(新版语法,可多个)见下方示例
<!-- 第1次失败:10秒后重启 -->
<onfailure action="restart" delay="10 sec"/>
<!-- 第2次失败:30秒后重启 -->
<onfailure action="restart" delay="30 sec"/>
<!-- 第3次及以后:不处理 -->
<onfailure action="none"/>

可用的 action 值:

  • restart - 重启服务
  • reboot - 重启计算机
  • none - 不处理

4. 8 服务依赖

参数类型说明示例
<depend>字符串依赖的其他服务(逗号分隔)<depend>MySQL80,Redis</depend>

4. 9 进程优先级

参数类型默认值说明示例
<priority>字符串Normal进程优先级:
Idle
BelowNormal
Normal
AboveNormal
High
Realtime(不推荐)
<priority>High</priority>

4. 10 运行账户

参数类型说明示例
<serviceaccount>块元素指定服务运行的账户(推荐)见下方示例
<!-- 使用本地系统账户 -->
<serviceaccount>
  <domain>NT AUTHORITY</domain>
  <user>LocalService</user>
</serviceaccount>

<!-- 使用指定用户 -->
<serviceaccount>
  <domain>.</domain>
  <user>Administrator</user>
  <password>yourpassword</password>
  <allowservicelogon>true</allowservicelogon>
</serviceaccount>

4. 11 高级功能

参数类型说明示例
<download>块元素启动前从 URL 下载文件<download from="https://example.com/app.jar" to="app.jar"/>
<resetfailure>时间失败计数器重置时间<resetfailure>1 day</resetfailure>

完整配置示例
<service>
  <!-- 基本信息 -->
  <id>myapp</id>
  <name>My Application</name>
  <description>Spring Boot 应用程序</description>
  
  <!-- 启动命令 -->
  <executable>java</executable>
  <arguments>-Xms512m -Xmx1024m -jar app.jar</arguments>
  <workingdirectory>C:\myapp</workingdirectory>
  
  <!-- 停止配置 -->
  <stoptimeout>30 sec</stoptimeout>
  
  <!-- 日志 -->
  <log mode="roll-by-size">
    <sizeThreshold>10240</sizeThreshold>
    <keepFiles>8</keepFiles>
  </log>
  
  <!-- 环境变量 -->
  <env name="JAVA_HOME" value="C:\jdk"/>
  
  <!-- 启动模式 -->
  <startmode>Automatic</startmode>
  <delayedAutoStart>true</delayedAutoStart>
  
  <!-- 失败恢复 -->
  <onfailure action="restart" delay="10 sec"/>
  <onfailure action="restart" delay="30 sec"/>
  <resetfailure>1 day</resetfailure>
  
  <!-- 依赖 -->
  <depend>MySQL80</depend>
  
  <!-- 优先级 -->
  <priority>Normal</priority>
</service>

注意事项
  1. 根节点是 <service>,不是 <configuration>
  2. 路径支持环境变量%BASE% 指向 exe 所在目录
  3. 时间单位secminhourday
  4. 大小单位:KB(千字节)
  5. <logmode>none</logmode> 慎用:生产环境建议保留日志便于排查问题

注意:

1. xml和exe文件名一定得一致
2. 文件名用来安装和卸载
3. 服务ID用来sc和net操作

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值