一、NSSM 是什么
NSSM(Non-Sucking Service Manager)是一个将普通 Windows 程序包装成标准 Windows 服务的工具。
核心用途是解决程序不是服务导致 Windows 服务管理器无法启动的问题。 版本 2.24 是目前最稳定、使用最广的生产版本。
二、NSSM 主要解决的问题
Windows 服务的硬性要求
Windows 原生服务必须调用 StartServiceCtrlDispatcher,实现 ServiceMain / Handler,并能被 SCM(Service Control Manager)管理。
以下程序通常无法满足上述要求:
| 程序类型 | 典型例子 |
|---|---|
| Java 程序 | java -jar xxx.jar |
| Python 程序 | python app.py |
| Node.js | node index.js |
| Go / C++ 普通 exe | 未按 Service API 编写 |
| 第三方中间件 | Redis、Nacos、MinIO(Windows 版) |
| 内部工具 | 自研采集器、Agent |
直接使用 sc create 或服务管理器启动这些程序通常会失败。
NSSM 的工作原理
Windows 服务 -> nssm.exe <- 真正注册成服务的程序 -> 你真正要跑的 exe / bat / cmd / java
NSSM 做了 5 件关键的事:
- 把自己注册成合法 Windows 服务
- 启动你的目标程序
- 监听进程状态
- 程序异常退出时自动重启
- 处理 stdin / stdout / 日志 / 信号
三、何时必须使用 NSSM(典型报错触发场景)
出现以下报错时,90% 的情况需要使用 NSSM:
❌ 报错 1:Error 1053(最常见)
Error 1053: The service did not respond to the start or control request in a timely fashion
原因:你注册的是普通程序,Windows 等不到 ServiceMain 回调。 解决方案:用 NSSM 包装该程序。
❌ 报错 2:Error 1067
The process terminated unexpectedly
原因:程序被当成服务启动,但立刻退出。 解决方案:NSSM + 自动重启策略。


