WinSW 3.x 安装 Windows 服务指南
一、简介
WinSW(Windows Service Wrapper)是一个用于将普通可执行程序(.exe)包装成 Windows 服务的工具。
🔗 GitHub:https://github.com/winsw/winsw
适用于:
- redis_exporter
- postgres_exporter
- node_exporter
- windows_exporter
- mysqld_exporter
- sql_exporter
- 以及任何可以在命令行运行的程序
🚀 相比 NSSM,WinSW 支持:
- 开机自动启动
- 服务失败自动重启
- 日志自动管理
- 配置简单
- 官方长期维护
二、📦 下载 WinSW
下载最新版 WinSW 3.x:
WinSW-x64.exe
建议下载 x64 版本。
三、📂 目录结构
以 redis_exporter 为例:
C:\
└── redis_exporter
│
├── redis_exporter.exe ← 实际程序
├── WinSW-x64.exe ← WinSW(保持原名即可)
└── redis_exporter.xml ← 配置文件
ℹ️ 说明:
WinSW 3.x 支持通过命令行参数指定 XML 配置文件,因此无需重命名
WinSW-x64.exe,直接使用原名即可。
四、⚙️ 创建 XML 配置
创建:
redis_exporter.xml
内容如下:
<service>
<id>redis_exporter</id>
<name>Redis Exporter</name>
<description>Prometheus Redis Exporter Service</description>
<executable>redis_exporter.exe</executable>
<arguments>--redis.addr=redis://127.0.0.1:6379</arguments>
<log mode="roll">
<logpattern>redis_exporter.log</logpattern>
<logpattern>redis_exporter.error.log</logpattern>
</log>
<startmode>Automatic</startmode>
<onfailure action="restart" delay="10 sec"/>
</service>
🔑 如果 Redis 配置了密码:
<arguments>
--redis.addr=redis://:password@127.0.0.1:6379
</arguments>
五、🚀 安装服务
使用管理员 CMD 或 PowerShell。
进入目录:
cd C:\redis_exporter
| 操作 | 命令 |
|---|---|
| 📥 安装服务 | WinSW-x64.exe install redis_exporter.xml |
| 🚀 启动服务 | WinSW-x64.exe start redis_exporter.xml |
| 🛑 停止服务 | WinSW-x64.exe stop redis_exporter.xml |
| 🔄 重启服务 | WinSW-x64.exe restart redis_exporter.xml |
| 🗑️ 卸载服务 | WinSW-x64.exe uninstall redis_exporter.xml |
六、🔍 查看服务
打开 Windows 服务管理器:
services.msc
可以看到:
Redis Exporter
也可以使用命令行查询:
sc query redis_exporter
七、📋 日志
默认会生成:
redis_exporter.log ← 标准输出日志
redis_exporter.error.log ← 错误日志
📂 日志位置与 WinSW 位于同一目录。
⚠️ 如果程序启动失败,请优先查看
.error.log。
八、⚙️ 设置自动启动
XML 中配置:
<startmode>Automatic</startmode>
安装完成后即可看到:
启动类型:自动
✅ Windows 重启后服务会自动运行。
九、🔁 失败自动重启
XML 中配置:
<onfailure action="restart" delay="10 sec"/>
表示:
- 💥 服务退出
- ⏳ 等待 10 秒
- 🔄 自动重新启动
ℹ️ 无需额外配置
sc failure。
十、🔄 升级 Exporter
停止服务:
WinSW-x64.exe stop redis_exporter.xml
替换:
redis_exporter.exe
重新启动:
WinSW-x64.exe start redis_exporter.xml
✅ 无需重新安装服务。
十一、🐘 Postgres Exporter 示例
📂 目录:
C:\postgres_exporter
├── postgres_exporter.exe
├── WinSW-x64.exe
└── postgres_exporter.xml
⚙️ XML 配置:
<service>
<id>postgres_exporter</id>
<name>Postgres Exporter</name>
<description>Prometheus PostgreSQL Exporter</description>
<executable>postgres_exporter.exe</executable>
<arguments>--sqlonly</arguments>
<log mode="roll">
<logpattern>postgres_exporter.log</logpattern>
<logpattern>postgres_exporter.error.log</logpattern>
</log>
<startmode>Automatic</startmode>
<onfailure action="restart" delay="10 sec"/>
</service>
🚀 安装并启动:
WinSW-x64.exe install postgres_exporter.xml
WinSW-x64.exe start postgres_exporter.xml
十二、🔍 WinSW 3.x 常见问题
1️⃣ Unable to locate xxx.xml
❌ 错误:
Unable to locate WinSW-x64.[xml|yml]
💡 原因: 未正确指定 XML 配置文件路径。
✅ 解决: 确保安装命令中指定了正确的 XML 文件名:
WinSW-x64.exe install redis_exporter.xml
2️⃣ XML 放在哪里?
⚠️ 必须与 WinSW-x64.exe 位于同一目录。
例如:
C:\redis_exporter
├── redis_exporter.exe
├── WinSW-x64.exe
└── redis_exporter.xml
3️⃣ 如何确认 XML 被读取?
如果 XML 有语法错误,WinSW 会立即提示:
Failed to parse XML
如果提示:
Unable to locate xxx.xml
说明 XML 根本没有找到,请检查文件名和路径。
4️⃣ 如何查看程序输出?
查看:
*.log ← 标准输出
*.error.log ← 错误输出
例如:
redis_exporter.log
redis_exporter.error.log
ℹ️ 这是排查启动失败最重要的日志。
5️⃣ 多个 Exporter 共用一个 WinSW-x64.exe?
⚠️ 每个 Exporter 目录需要各自放一份 WinSW-x64.exe。
因为 Windows 服务的 EXE 路径在注册时已固定,不同目录的服务不能共用同一个 EXE 文件。
十三、📂 推荐目录结构
建议所有 Exporter 保持统一结构:
D:\Exporters
│
├── redis_exporter
│ ├── redis_exporter.exe
│ ├── WinSW-x64.exe
│ ├── redis_exporter.xml
│ ├── redis_exporter.log
│ └── redis_exporter.error.log
│
├── postgres_exporter
│ ├── postgres_exporter.exe
│ ├── WinSW-x64.exe
│ └── postgres_exporter.xml
│
├── windows_exporter
│ ├── windows_exporter.exe
│ ├── WinSW-x64.exe
│ └── windows_exporter.xml
│
└── node_exporter
├── node_exporter.exe
├── WinSW-x64.exe
└── node_exporter.xml
✅ 统一结构便于管理和后续升级维护。
浙公网安备 33010602011771号