Error 1053 Error 1067 服务“启动后立即停止” Java / Python 程序无法后台运行 windows nssm注册器下载与报错处理

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.jsnode 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通用最稳

Read more

Microsoft Visual C++ 运行库安装教程(2025 最新版全版本修复指南)

Microsoft Visual C++ 运行库安装教程(2025 最新版全版本修复指南)

前言 在使用大型软件、开发工程项目或玩 3A 游戏时,很多人都遇到过这样的报错: “缺少 msvcp140.dll” “无法继续执行代码,因为系统找不到 vcruntime140_1.dll” “程序无法启动,因为计算机中丢失了 MSVCR100.dll” 这些提示看似复杂,其实本质是 Microsoft Visual C++ 运行库(VC++ Redistributable)缺失或损坏 所致。 本文将带来 2025 年最新版 Microsoft Visual C++ 运行库安装教程,无论你是游戏玩家、开发者还是普通用户,都能找到最合适的解决方案。内容涵盖: * 一键修复方法(适合新手,快速解决 DLL 报错) * 手动下载安装方案(适合专业或开发用途) * 常见 DLL 报错与完整修复思路 * 系统维护与预防技巧

By Ne0inhk
【Java】面向对象程序三板斧——如何优雅设计包、封装数据与优化代码块?

【Java】面向对象程序三板斧——如何优雅设计包、封装数据与优化代码块?

🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:【Java】内容概括 【前言】 在Java编程中,类和对象是面向对象编程的核心概念。而包(Package)、封装(Encapsulation)以及代码块(Code Block)作为重要的语言特性,在组织代码结构、保障数据安全和控制代码执行流程等方面发挥着关键作用。本文将通过详细的代码示例和图解,带大家深入理解这些特性。 文章目录: * 一、包(Package)——代码的“收纳盒” * 1.定义 * 2.导入包中的类 * 3.自定义包 * 3.1 基本规则 * 3.2 使用 IDEA 创建包过程 * 3.3 常见的包 * 3.4

By Ne0inhk

Gradle 8.0+新特性解析:为何JDK 17成为必选项?

Gradle 8.0+与JDK 17深度适配:Android构建工具链的技术革命 如果你最近打开一个Gradle 8.0+的Android项目,可能会遇到这样的报错:"Android Gradle plugin requires Java 17 to run"。这不是简单的版本警告,而是Android构建工具链的一次重大技术升级。作为Android开发者,理解这次变革背后的技术动因,将帮助你更好地驾驭现代构建系统,提升开发效率。 1. 为什么Gradle 8.0+强制要求JDK 17? Gradle团队选择JDK 17作为最低要求并非偶然。这次升级背后是一系列技术决策的必然结果: * 性能优化需求:JDK 17引入的ZGC垃圾收集器将内存管理效率提升了一个量级。在大型Android项目中,Gradle构建过程常因GC停顿导致耗时增加。实测数据显示,使用JDK 17后,clean build时间平均减少15-20%。 * 安全加固:JDK 17包含的JEP 403(

By Ne0inhk
Gemini永久会员    关于 `debug_zero.cpp` 在 HotSpot 虚拟机中的具体实现和作用,以下是更详细的分析(基于 OpenJDK 源代码)

Gemini永久会员 关于 `debug_zero.cpp` 在 HotSpot 虚拟机中的具体实现和作用,以下是更详细的分析(基于 OpenJDK 源代码)

关于 debug_zero.cpp 在 HotSpot 虚拟机中的具体实现和作用,以下是更详细的分析(基于 OpenJDK 源代码): 1. 文件定位与实际作用 在 OpenJDK 的 HotSpot 代码库中,debug_zero.cpp 的主要功能是 检测内存初始化问题,尤其是未初始化内存的使用。它通常与以下调试功能相关: * 零页映射(Zero Page Mapping):将内存区域映射到操作系统的零页(读写零页会触发 SIGSEGV),从而暴露未初始化内存的访问。 * 内存填充(Memory Filling):用特定模式(如 0xdeadbeef)填充内存,便于检测后续的错误使用。 文件路径通常为: hotspot/src/share/vm/runtime/debug_zero.cpp

By Ne0inhk