Error 1053 Error 1067 服务“启动后立即停止” Java / Python 程序无法后台运行 windows nssm注册器下载与报错处理
https://nssm.cc/ci/nssm-2.24-101-g897c7ad.zip
nssm官网下载地址
如果不能访问,网盘自取
下载通道:夸克盘
一、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 + 自动重启策略
❌ 报错 3:服务“启动后立即停止”
服务正在启动… 服务已停止 原因
- 程序是前台程序
- SCM 认为它“不合法”
解决方案
✅ nssm 托管进程生命周期
❌ 报错 4:Java / Python 程序无法后台运行
java.exe 退出 python.exe 无日志 原因
- 没有控制台
- stdin/stdout 丢失
解决方案
✅ nssm 重定向日志
❌ 报错 5:程序关不掉 / 关机卡死
Windows is shutting down… 原因
- 程序收不到 stop 信号
解决方案
✅ nssm 发送 CTRL+C / WM_CLOSE
四、nssm 2.24 基本使用(实操)
4.1 下载与准备
- 文件:
nssm.exe - 推荐放置路径:
C:\nssm\nssm.exe ⚠ 一定用管理员权限
4.2 最简单的服务注册(GUI)
cd C:\nssm nssm install MyService 会弹出 GUI 窗口:
Application 页面(最重要)
| 字段 | 填什么 |
|---|---|
| Path | 程序路径(exe / cmd / java.exe) |
| Arguments | 参数(如 -jar app.jar) |
| Startup directory | 程序工作目录 |
示例:Java 程序
Path: C:\Java\bin\java.exe Arguments: -jar app.jar Startup directory: D:\app 点击 Install service
4.3 命令行方式(推荐生产)
nssm install MyService ^ "C:\Java\bin\java.exe" ^ "-jar app.jar" 设置工作目录:
nssm set MyService AppDirectory D:\app 五、非常重要的高级配置(强烈建议)
5.1 日志重定向(避免“啥也没有”)
nssm set MyService AppStdout D:\logs\out.log nssm set MyService AppStderr D:\logs\err.log 👉 解决:
- 服务启动失败无日志
- 程序异常无输出
5.2 自动重启(生产必配)
nssm set MyService AppExit Default Restart 5.3 优雅停止(防数据损坏)
nssm set MyService AppStopMethodConsole 1500 nssm set MyService AppStopMethodWindow 1500 nssm set MyService AppStopMethodThreads 1500 六、常见 nssm 相关报错与解决
❌ 报错:The system cannot find the file specified
原因:
- Path 写的是
java - 没写绝对路径
✅ 正确:
C:\Java\bin\java.exe ❌ 报错:服务启动成功但程序没运行
原因:
- Startup directory 没设置
- 相对路径 jar 找不到
✅ 解决:
nssm set MyService AppDirectory D:\app ❌ 报错:中文路径程序无法启动
原因:
- 程序不支持 Unicode
- 控制台编码问题
✅ 解决:
- 尽量避免中文路径
- 或用 cmd 包一层
❌ 报错:服务删除后还在
sc delete MyService 或
nssm remove MyService confirm 七、nssm vs 其他方式(对比结论)
| 方式 | 是否推荐 |
|---|---|
| sc create | ❌(只能服务程序) |
| srvany | ❌(已废弃) |
| WinSW | ⚠️(适合 .NET) |
| Task Scheduler | ❌(不可控) |
| nssm | ✅ 通用最稳 |
