WinSW配置Java应用为Windows系统服务
WinSW介绍
WinSW的全称是Windows Service Wrapper,可以将应用打包成Windows服务的方式运行。
WinSW 3 可在安装了 .NET Framework 4.6.1 或更高版本的 Windows 平台上运行。 对于没有 .NET Framework 的系统,该项目提供基于 .NET 7 的本地 64 位和 32 位可执行文件。
- 项目地址:https://github.com/winsw/winsw
- 最新发行版下载地址:https://github.com/winsw/winsw/releases
- 注:请选择 Latest 版本下载
- 需要下载的文件
- 配置文件:二选一
- 全部配置:sample-allOptions.xml
- 精简配置:sample-minimal.xml
- 执行文件:根据操作系统位数,一般都是x64了
- WinSW-x64.exe
- 配置文件:二选一
安装
- 一组WinSW(一个配置+一个执行文件)只能提供一个应用的服务能力。
- 将下载好的配置文件和可执行文件放置到jar包同级目录下。
- 将配置文件和可执行文件改名和jar包同名。(非必要但是建议)
- 使用文本编辑器编辑配置文件(.xml),详细配置如下。
配置
所有的配置内容需要在<service></service>标签内进行配置,修改的配置会在下一次服务启动时生效
- 核心配置:
- 系统服务ID:<id>
标签内配置的字符串需要是系统服务中的唯一值 - 系统服务名称:<name>
显示在系统服务管理页面的服务名称 - 服务备注:<description>
系统服务管理中对此服务的备注 - 可执行应用:<executable>
此处配置是应用的执行文件,比如java服务就是配置java即可(前提是配了环境变量) - 启动参数:<arguments>
此处配置应用的启动参数,比如 -jar D:\xxx.jar - 服务启动模式:<startmode>
服务在系统启动时自启还是手动启动,一般设置自启:Automatic,前提是依赖服务都配置了,比如mysql、redis之类的 - WinSW日志模式:<log mode="none"/>
这里设置的是不打印日志,因为如果不设置的话,WinSW会把控制台日志一股脑全到打印到一个叫做 服务名.log 的日志文件中 - WinSW日志位置:<logpath>
这里的日志是WinSW的服务日志,不是应用的内部日志,随便设置一个位置即可,不设置的话会生成在运行同目录下
- 系统服务ID:<id>
- 其他配置:
详见:https://github.com/winsw/winsw/blob/v3/docs/xml-config-file.md - 日志更多参数:
详见:https://github.com/winsw/winsw/blob/v3/docs/logging-and-error-reporting.md - 示例
<service> <id>TEST-Server</id> <name>测试服务</name> <description>这是一个测试服务</description> <executable>java</executable> <arguments>-Dfile.encoding=utf-8 -jar D:\test.jar</arguments> <startmode>Automatic</startmode> <log mode="none"/> <logpath>D:\test\logs</logpath> </service>
使用
- 通过可执行文件对服务进行安装、启动、停止、卸载
- 命令方式:
xxx.exe <Command>
- Command
- 安装服务:install
- 启动服务:start
- 停止服务:stop
- 重启服务:restart
- 服务状态:status
- 卸载服务:uninstall
- 进阶使用方式详见:https://github.com/winsw/winsw/blob/v3/docs/cli-commands.md