当前位置: 首页 > news >正文

NSSM 完全指南:如何将任意程序部署为 Windows 服务

NSSM 完全指南:将任意程序部署为 Windows 服务

目录

  1. 什么是 NSSM?
  2. 安装与基础使用
  3. 高级配置(GUI 模式)
  4. 实战案例
  5. 常见问题排查
  6. 替代方案对比
  7. 总结

1. 什么是 NSSM?

NSSM(Non-Sucking Service Manager)是一个轻量级工具,可将命令行程序注册为 Windows 服务,实现:

  • ✅ 后台静默运行(不依赖 CMD)
  • ✅ 开机自启动
  • ✅ 崩溃自动恢复
  • ✅ 日志集中管理

典型应用场景

场景示例
Java 应用部署Spring Boot Jar 包后台运行
脚本守护进程Python/Node.js 长期运行
游戏服务器崩溃后自动重启

2. 安装与基础使用

安装步骤

# 下载 nssm.exe 并放入系统路径
copy nssm.exe C:\Windows

核心命令

命令作用
nssm install <服务名>注册新服务
nssm start/stop/restart服务启停管理
nssm remove <服务名>删除服务

示例:部署 Java 应用

nssm install MyApp "C:\jdk\bin\java.exe" -jar "D:\app.jar"
nssm set MyApp AppDirectory "D:\"
nssm set MyApp AppStdout "D:\logs\app.log"

3. 高级配置(GUI 模式)

运行 nssm edit <服务名> 打开配置界面:

1. **Path**: 程序绝对路径(如 `java.exe`)
2. **Arguments**: 启动参数(如 `-jar app.jar`)
3. **Startup Directory**: 工作目录
4. **Logging**: - Stdout/Stderr 重定向到文件
5. **Recovery**: - 设置崩溃后重启策略(推荐首次延迟 1000ms)

4. 实战案例

案例 1:Spring Boot 服务化

nssm install MySpringBoot "C:\jdk\bin\java.exe" -jar "D:\app.jar"
nssm set MySpringBoot AppStdout "D:\logs\spring.log"
nssm set MySpringBoot Start SERVICE_AUTO_START

案例 2:Python 脚本守护进程

nssm install MyPyScript "C:\Python\python.exe" "D:\script.py"
nssm set MyPyScript AppThrottle 2000  # 2秒后自动重启

5. 常见问题排查

服务启动后立即停止

# 检查日志
type "D:\logs\service_error.log"# 验证路径(特别注意空格)
where java

端口冲突

netstat -ano | findstr 8080
taskkill /PID 1234 /F

6. 替代方案对比

工具优势劣势
NSSM零编码,支持任意程序需手动安装
SC系统原生配置复杂
WinSW支持 XML 配置依赖 .NET 环境

7. 总结

最佳实践清单

  1. 始终配置 AppStdout 记录日志
  2. 使用完整路径(避免 Program Files 空格问题)
  3. 设置 Start SERVICE_AUTO_START 实现开机自启
  4. 复杂环境建议先用 nssm edit 图形界面调试

官方文档:nssm.cc
进阶技巧:Windows 服务管理指南

http://www.xdnf.cn/news/298549.html

相关文章:

  • OpenHarmony GPIO应用开发-LED
  • 搭建一个简单的博客界面(前端HTML+CSS+JS)
  • 《AI大模型应知应会100篇》第50篇:大模型应用的持续集成与部署(CI/CD)实践
  • 互联网大厂Java求职面试:AI与云原生下的系统设计挑战-3
  • K8S有状态服务部署(MySQL、Redis、ES、RabbitMQ、Nacos、ZipKin、Sentinel)
  • 【JsonCpp、Muduo、C++11】JsonCpp库、Muduo库、C++11异步操作
  • Jenkins 改完端口号启动不起来了
  • IoTDB磁盘I/O性能监控与优化指南
  • Caffeine快速入门
  • Oracle02-安装
  • JavaScript 对象引用与值传递的奥秘
  • Acrel-EIoT 能源物联网云平台在能耗监测系统中的创新设计
  • 启发式算法-模拟退火算法
  • STM32的智慧农业系统开发(uC/OS-II)
  • 如何设计Kafka的高可用跨机房容灾方案?(需要实战,未实战,纯理论)
  • 破局者手册 Ⅱ:测试开发深度攻坚,引爆质量优化新动能!
  • ES6/ES11知识点 续四
  • 【自然语言处理与大模型】LlamaIndex的词嵌入模型和向量数据库
  • 奇瑞依托汽车产业链,实现服务机器人万台下线
  • 【计算机网络 第8版】谢希仁编著 第四章网络层 地址类题型总结
  • 前端-HTML+CSS+JavaScript+Vue+Ajax概述
  • UE5 诺伊腾动捕使用笔记
  • Vue + Element UI 表单弹窗输入法卡顿问题解决方案
  • 第二章:langchain文本向量化(embed)搭建与详细教程-本地服务方式(下)
  • 2025 后端自学UNIAPP【项目实战:旅游项目】2、安装下载引用前端UI框架:uview-plus
  • OSCP - Proving Grounds - NoName
  • window 显示驱动开发-线程和同步级别一级(二)
  • 基于深度学习的图像识别技术:从原理到应用
  • 【数据挖掘】Apriori算法
  • 【愚公系列】《Manus极简入门》021-音乐创作助手:“音符魔术师”