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"/>

表示:

  1. 💥 服务退出
  2. ⏳ 等待 10 秒
  3. 🔄 自动重新启动

ℹ️ 无需额外配置 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

✅ 统一结构便于管理和后续升级维护。

posted on 2026-07-27 10:17  a120608yby  阅读(10)  评论(0)    收藏  举报