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 件关键的事:

  1. 把自己注册成 合法 Windows 服务

  2. 启动你的目标程序

  3. 监听进程状态

  4. 程序异常退出 → 自动重启

  5. 处理 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 通用最稳
相关推荐
肉包_5112 小时前
两个数据库互锁,用全局变量互锁会偶发软件卡死
开发语言·数据库·c++
喵手2 小时前
Python爬虫实战:HTTP缓存系统深度实战 — ETag、Last-Modified与requests-cache完全指南(附SQLite持久化存储)!
爬虫·python·爬虫实战·http缓存·etag·零基础python爬虫教学·requests-cache
大空大地20262 小时前
流程控制语句--if语句
开发语言
喵手2 小时前
Python爬虫实战:容器化与定时调度实战 - Docker + Cron + 日志轮转 + 失败重试完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·容器化·零基础python爬虫教学·csv导出·定时调度
2601_949146532 小时前
Python语音通知接口接入教程:开发者快速集成AI语音API的脚本实现
人工智能·python·语音识别
寻梦csdn3 小时前
pycharm+miniconda兼容问题
ide·python·pycharm·conda
毕设源码-邱学长3 小时前
【开题答辩全过程】以 基于PHP的发热病人管理平台的设计与实现为例,包含答辩的问题和答案
开发语言·php
HellowAmy3 小时前
我的C++规范 - 线程池
开发语言·c++·代码规范
独自破碎E3 小时前
【BISHI9】田忌赛马
android·java·开发语言