目录
一、概述
在项目开发完成线上之后需要启动程序,如果每一次都手动启动太麻烦,如果放到开始菜单里面,服务器重启之后还需要在手动登录一下,程序才会启动,为了解决这一问题,推荐使用WinSW来注册服务。
WinSW(Windows Service Wrapper)是微软推荐的开源工具(GitHub 地址:https://github.com/winsw/winsw),本质是一个轻量级的可执行程序(exe 文件),能把任意可执行程序 / 脚本(比如 Java JAR、Nginx、Python 脚本、Redis 等)封装成标准的 Windows 系统服务。
二、如何使用
WinSW 的使用逻辑对所有程序都通用,核心是 "1 个 exe + 1 个 XML 配置文件",步骤如下:
- 准备工具和程序
- 整理文件结构
- 编写 XML 配置文件(核心)
xml
<service>
<!-- 1. 服务基础信息(唯一标识,不能重复) -->
<id>MyServiceID</id> <!-- 服务内部ID(无空格/特殊字符) -->
<name>我的自定义服务</name> <!-- 服务列表中显示的名称 -->
<description>后台运行的自定义服务</description>
<!-- 2. 程序启动配置(核心:改这两个参数适配你的程序) -->
<executable>程序路径</executable> <!-- 要运行的程序路径(如java、nginx.exe、python.exe) -->
<arguments>启动参数</arguments> <!-- 程序的启动参数(如-jar xxx.jar、-c xxx.conf) -->
<!-- 4. 服务运行规则 -->
<startmode>Automatic</startmode> <!-- 启动模式:Automatic(开机自启)/ Manual(手动) -->
<onfailure>Restart</onfailure> <!-- 程序崩溃时自动重启 -->
<restartdelay>3000</restartdelay> <!-- 重启延迟3秒 -->
<!-- 5. 日志配置(排查问题必备) -->
<logpath>%BASE%\log</logpath> <!-- 日志目录(自动创建) -->
<logmode>rotate</logmode> <!-- 日志滚动(避免文件过大) -->
</service>
注意:这里的exe、xml文件名要跟启动程序的名字一致
- 注册服务
java
MyService.exe install
- 启动服务
java
MyService.exe start
- 停止服务
java
MyService.exe stop
- 重启服务
java
MyService.exe restart
- 卸载服务(先停止)
java
MyService.exe uninstall
- 查看状态
java
MyService.exe status
三、Java注册服务
- 编写XML配置文件
xml
<service>
<id>xxx</id>
<name>xxx</name>
<description>xxx</description>
<env name="JAVA_HOME" value="%JAVA_HOME%"/>
<executable>java</executable>
<arguments>-jar "C:\Users\Administrator\Desktop\123\xxx.jar"</arguments>
<!-- 开机启动 -->
<startmode>Automatic</startmode>
<onfailure>Restart</onfailure> <!-- 程序崩溃时自动重启 -->
<restartdelay>3000</restartdelay> <!-- 重启延迟3秒 -->
<!-- 日志配置 -->
<logpath>%BASE%\log</logpath>
<logmode>rotate</logmode>
</service>