winsw是一个通用的Windows服务包装器,可以将任何可执行文件(.exe,.bat等)包装成Windows服务。
winsw不需要安装,仅需将winsw.exe和配置文件复制到指定目录即可。
winsw通过一个XML配置文件来定义服务的行为,可以轻松地安装,卸载,启动和停止自定义Windows服务。
下载
https://github.com/winsw/winsw/releases
https://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/
特点
1、轻量级:winsw非常轻便,处理Windows服务所需的文件非常少,而且不需要安装任何东西,只需要将winsw.exe和配置文件复制到指定目录即可。
2、易配置:winsw使用XML作为配置文件格式,配置文件非常易于阅读和编辑。winsw支持命令行参数来替代配置文件中的某些选项,从而使服务的配置更加简单。
3、灵活性:winsw可以轻易地将几个脚本或可执行文件捆绑到一个Windows服务中。winsw通过提供许多不同的配置选项来适应各种服务需求。
4、可扩展性:winsw提供了丰富的扩展点来处理Windows服务的各种方面,例如日志记录和事件通知。
使用
winsw的使用非常简单,只需要将WinSW-x64.exe和配置文件复制到指定目录即可。
以下是一个基本的winsw配置文件示例,以nacos为例。
<!--
配置示例:https://github.com/winsw/winsw/blob/master/examples/sample-allOptions.xml
需要使用管理员身份运行
注册服务:WinSW-x64.exe install
卸载服务:WinSW-x64.exe uninstall
查看状态:sc query nacos
启动服务:sc start nacos、net start nacos
停止服务:sc stop nacos、net stop nacos
如果 nacos 服务在运行时,卸载了 nacos 服务,nacos 服务在 Windows 服务列表中不会消失,消失时间为服务停止后
-->
<service>
<!-- Windows 服务名 -->
<id>nacos</id>
<!-- 名称,比如nacos -->
<name>nacos-server-2.2.2</name>
<!-- 描述 -->
<description>nacos服务</description>
<!-- 启动执行命令 -->
<executable>"D:\workspace_coding\docker\k8s\nacos-server-2.2.2\bin\startup.cmd"</executable>
<!-- 启动执行参数 -->
<startarguments>-m standalone</startarguments>
<!-- 停止执行命令 -->
<stopexecutable>"D:\workspace_coding\docker\k8s\nacos-server-2.2.2\bin\shutdown.cmd"</stopexecutable>
<!-- 停止执行参数 -->
<stoparguments></stoparguments>
<!--
选项:日志路径
为服务包装器生成的所有日志设置自定义日志记录目录
默认值:目录,包含执行者
-->
<logpath>%BASE%\logs</logpath>
<!-- 控制日志-->
<log mode="roll-by-size">
<!-- 一个日志文件大小 20480k(20M),单位是k-->
<sizeThreshold>20480</sizeThreshold>
<!-- 一共有 10 个日志文件,-->
<keepFiles>10</keepFiles>
</log>
</service>
如果遇到停止服务,一直卡在正在停止
的服务,可以查询进行执行杀死
可以一个窗口去关闭,然后一个窗口去杀死
C:\Users\xiaojingge>net start JarBoot
JarBoot 服务正在启动 .
JarBoot 服务已经启动成功。
C:\Users\xiaojingge>net stop JarBoot
JarBoot 服务正在停止............
系统出错。
发生系统错误 1067。
进程意外终止。
JarBoot 服务已成功停止。
C:\Users\xiaojingge>sc queryex JarBoot
SERVICE_NAME: JarBoot
TYPE : 10 WIN32_OWN_PROCESS
STATE : 3 STOP_PENDING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0xb
WAIT_HINT : 0x3a98
PID : 55680
FLAGS :
C:\Users\xiaojingge>taskkill /pid "55680" -t -f
成功: 已终止 PID 15676 (属于 PID 55860 子进程)的进程。
成功: 已终止 PID 17252 (属于 PID 59996 子进程)的进程。
成功: 已终止 PID 55860 (属于 PID 55680 子进程)的进程。
成功: 已终止 PID 59996 (属于 PID 55680 子进程)的进程。
成功: 已终止 PID 55680 (属于 PID 1420 子进程)的进程。
评论区