nssm的使用方法和场景

146 阅读3分钟

下面这份是 「NSSM = Windows 下跑 Java / Python / Node / 任意程序 的标准答案级教程」
能直接上生产 的标准来讲,不是零碎命令,而是完整方法 + 场景 + 脚本 + 踩坑总结

Spring Boot + JAR 后台运行,正是 NSSM 的最佳使用场景。


一、NSSM 是什么?一句话解释清楚

NSSM(Non-Sucking Service Manager)

👉 把 任何可执行程序 注册成 Windows 服务

✔ 开机自启
✔ 后台运行
✔ 自动重启
✔ 日志重定向
✔ 不依赖窗口 / 用户登录


二、什么时候必须用 NSSM?

场景是否适合
Spring Boot JAR 后台运行✅ 必须
Java 程序无人值守
Python 定时 / 常驻任务
Node.js 服务
EXE 后台运行
需要开机自启
只想临时跑脚本

三、NSSM vs 其他方式对比(为什么选它)

方式稳定自启自动重启适合生产
cmd 手动 java -jar
bat + start
任务计划
NSSM⭐⭐⭐⭐⭐

四、NSSM 安装(只做一次)

1️⃣ 下载

2️⃣ 解压

例如:

D:\nssm\
 └── win64\nssm.exe

3️⃣ 配置环境变量(推荐)

把:

D:\nssm\win64

加到 PATH

验证:

nssm version

五、最核心:用 NSSM 跑一个 Spring Boot JAR(完整)

🎯 场景:后台运行 Spring Boot + 自动重启


1️⃣ 基础准备

假设:

Java: D:\jdk-17
Jar : D:\oa\ParkOfficeSystem-0.0.1-SNAPSHOT.jar
端口: 9003

2️⃣ 安装服务(GUI 推荐)

nssm install ParkOfficeSystem

弹出窗口,按下面填写👇


Application 标签

字段内容
PathD:\jdk-17\bin\java.exe
Arguments-Xms512m -Xmx1024m -jar ParkOfficeSystem-0.0.1-SNAPSHOT.jar
Startup directoryD:\oa

Startup directory 非常重要


Details 标签(强烈建议)

内容
Display namePark Office System
DescriptionOA System Spring Boot

I/O 标签(日志)

路径
StdoutD:\oa\logs\stdout.log
StderrD:\oa\logs\stderr.log

✔ 自动创建文件
✔ 防止日志丢失


Exit actions(自动重启)

Exit codeAction
DefaultRestart

点击 Install service


3️⃣ 启动服务

nssm start ParkOfficeSystem

4️⃣ 查看状态

nssm status ParkOfficeSystem

5️⃣ 停止 / 重启

nssm stop ParkOfficeSystem
nssm restart ParkOfficeSystem

六、自动重启原理(为什么可靠)

  • Java 崩溃 / OOM
  • 程序 exit(1)
  • 未捕获异常

👇

NSSM 监控进程
↓
检测退出
↓
自动重启

比你自己写 while(true) 强 10 倍


七、生产级 JVM 参数推荐(直接用)

-Xms512m
-Xmx1024m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=D:\oa\logs\heapdump.hprof
-Dspring.profiles.active=prod

八、一键安装服务脚本(不会重复注册)

@echo off
set SERVICE_NAME=ParkOfficeSystem
set NSSM=nssm
set JAVA=D:\jdk-17\bin\java.exe
set APP_HOME=D:\oa
set JAR=ParkOfficeSystem-0.0.1-SNAPSHOT.jar

:: 判断服务是否存在
sc query "%SERVICE_NAME%" >nul 2>&1
if %errorlevel%==0 (
    echo Service already exists.
    goto start
)

echo Installing service...
%NSSM% install %SERVICE_NAME% "%JAVA%" ^
 "-Xms512m -Xmx1024m -jar %JAR%"
%NSSM% set %SERVICE_NAME% AppDirectory "%APP_HOME%"
%NSSM% set %SERVICE_NAME% Start SERVICE_AUTO_START
%NSSM% set %SERVICE_NAME% AppExit Default Restart

:start
echo Starting service...
%NSSM% start %SERVICE_NAME%
pause

九、删除服务(你刚刚遇到的)

必须管理员

nssm stop ParkOfficeSystem
nssm remove ParkOfficeSystem confirm

十、典型使用场景大全(你以后都能用)

程序用法
Spring Bootjava -jar
MyBatis 定时任务java -jar
Pythonpython app.py
Nodenode index.js
FastAPIuvicorn
可执行 exe直接 path

十一、90% 的坑我帮你提前踩完了

❌ 错误 1:jar 路径写错

👉 必须配 Startup directory


❌ 错误 2:服务名有空格

👉 用:

ParkOfficeSystem

❌ 错误 3:日志不重定向

👉 最终你只能抓瞎


❌ 错误 4:忘记管理员权限

👉 创建 / 删除必炸


十二、什么时候不该用 NSSM?

情况建议
Docker 环境Docker
Linuxsystemd
频繁部署CI + Docker

十三、总结一句话

NSSM = Windows 上跑后端服务的“标准答案”