NSSM服务

一、介绍

  • 全称:Non-Sucking Service Manager
  • 核心功能:将一个普通的 Windows 可执行文件(如 .exe, .bat, .py, .jar 等)封装成一个 Windows 服务。
  • 解决的问题:许多应用程序本身并不具备作为 Windows 服务运行的能力。NSSM 充当一个包装器或守护进程,使这些程序能够以服务的身份在后台运行,并享受服务带来的所有好处。

二、NSSM优点

  1. 自动启动:配置为自动启动后,服务会在系统启动时自动运行,无需用户登录。
  2. 后台运行:程序在后台静默运行,没有用户界面,不占用任务栏位置。
  3. 生命周期管理:可以通过标准的 Windows 服务管理界面(services.msc)或命令行(sc, net)方便地启动、停止、重启、暂停服务。
  4. 崩溃恢复:可以配置服务在意外退出时自动重启,增强程序的健壮性。
  5. 统一管理:将所有需要长期运行的程序统一到"服务"中进行管理,规范且高效。
  6. 权限控制:可以指定服务以特定的用户身份(如 SYSTEM 或自定义管理员账户)运行。

三、下载与安装

  1. 访问官网:nssm.cc/download
  2. 选择版本:下载最新稳定版(如 nssm 2.24)。根据你的系统架构(32位或64位)选择对应的 ZIP 包。
  3. 安装:NSSM 是绿色软件,无需安装。只需将 ZIP 包解压到一个你喜欢的目录,例如 D:\nssm
  4. 添加到 PATH(可选):为了在任何命令行窗口中使用 nssm 命令,可以将 nssm.exe 所在的路径添加到系统的 PATH 环境变量中。

四、常用命令

4.1、核心服务生命周期管理命令

这些是最常用的一组命令。

命令 说明 示例
nssm install <servicename> [<application> [<arguments>]] 安装服务。如果不指定应用路径,则会打开 GUI 进行配置。 nssm install MyService nssm install MyService "C:\MyApp\app.exe" "-p 8080"
nssm start <servicename> 启动服务。 nssm start MyService
nssm stop <servicename> 停止服务。 nssm stop MyService
nssm restart <servicename> 重启服务(先停止,再启动)。 nssm restart MyService
nssm pause <servicename> 暂停服务(如果服务支持)。 nssm pause MyService
nssm continue <servicename> 恢复被暂停的服务(如果服务支持)。 nssm continue MyService

4.2、服务配置管理命令

这些命令用于查看和修改服务的参数。

命令 说明 示例
nssm edit <servicename> 打开服务的 GUI 配置界面进行修改。 nssm edit MyService
nssm get <servicename> <parameter> 获取服务某个配置参数的值。 nssm get MyService AppParameters
nssm set <servicename> <parameter> <value> 设置服务某个配置参数的值。 nssm set MyService AppDirectory "C:\MyApp"
nssm reset <servicename> <parameter> 将某个配置参数重置为默认值。 nssm reset MyService ObjectName

4.3、服务安装与移除命令

命令 说明 示例
nssm remove <servicename> 交互式地移除/卸载服务。会要求你确认。 nssm remove MyService
nssm remove <servicename> confirm 无条件直接移除/卸载服务,无需确认。 nssm remove MyService confirm

4.4、服务状态与信息查询命令

命令 说明 示例
nssm status <servicename> 检查服务的状态。返回如 SERVICE_RUNNING, SERVICE_STOPPED 等。 nssm status MyService
nssm statuscode <servicename> 以数字代码的形式返回服务的状态。 nssm statuscode MyService
nssm list 列出所有由 NSSM 管理的服务。 nssm list

4.5、高级与不常用命令

命令 说明 示例
nssm dump <servicename> 生成一个包含服务所有当前配置的可重命名脚本。用于备份或复制配置。 nssm dump MyService > config.txt
nssm rotatelogs <servicename> 手动轮转(归档)该服务的输出日志文件。 nssm rotatelogs MyService
nssm process <servicename> 显示托管该服务的 NSSM 进程的 PID。 nssm process MyService
nssm processes 显示所有 NSSM 服务进程的 PID。 nssm processes

4.6、常用配置参数(用于 get/set 命令)

当使用 nssm set <servicename> <parameter> <value> 时,以下是一些最常用的 <parameter>

参数 说明 示例
Application 要运行的可执行文件的完整路径。 nssm set MyService Application "C:\Program Files\nodejs\node.exe"
AppParameters 传递给可执行文件的命令行参数。 nssm set MyService AppParameters "app.js"
AppDirectory 应用程序的启动工作目录。 nssm set MyService AppDirectory "C:\MyApp"
AppStdout 重定向标准输出(stdout)的日志文件路径。 nssm set MyService AppStdout "C:\logs\service.log"
AppStderr 重定向标准错误(stderr)的日志文件路径。 nssm set MyService AppStderr "C:\logs\error.log"
AppExit 服务退出行为。默认为 Restart,配合 AppThrottle 使用。 nssm set MyService AppExit Default
AppThrottle 服务重启前的延迟时间(秒)。 nssm set MyService AppThrottle 5
DisplayName 在服务管理器中显示的友好名称。 nssm set MyService DisplayName "我的重要服务"
Start 启动类型。SERVICE_AUTO_START(自动), SERVICE_DEMAND_START(手动), SERVICE_DISABLED(禁用)。 nssm set MyService Start SERVICE_DEMAND_START
ObjectName 运行服务所用的账户(如 .\AdministratorNT AUTHORITY\SYSTEM)。 nssm set MyService ObjectName ".\MyUser"
Type 服务类型。绝大多数情况使用 SERVICE_WIN32_OWN_PROCESS nssm set MyService Type SERVICE_WIN32_OWN_PROCESS

五、案例:

5.1、Nginx服务

5.1.1、使用 GUI 界面安装

  1. 安装服务

    shell 复制代码
    nssm install Nginx
  2. 在弹出的 GUI 界面中配置:

    Application 标签页

    • Path : D:\nginx\nginx.exe (你的 nginx.exe 完整路径)
    • Startup directory : D:\nginx (Nginx 安装目录)
    • Arguments: (留空)

    Details 标签页

    • Display name : Nginx Web Server (可选,更友好的显示名称)
    • Startup type : Automatic (设置为自动启动)

    I/O 标签页

    • Output (stdout) : D:\nginx\logs\service-stdout.log
    • Error (stderr) : D:\nginx\logs\service-stderr.log
      这会将 Nginx 的控制台输出重定向到日志文件

    Exit 标签页

    • 勾选 Restart 选项,设置:
      • Restart delay (ms) : 5000 (失败后等待 5 秒重启)
  3. 点击 Install service完成安装。

5.1.2、完全使用命令行安装(适合脚本化部署)

shell 复制代码
# 安装服务
nssm install Nginx "D:\nginx\nginx.exe"

# 设置启动目录
nssm set Nginx AppDirectory "D:\nginx"

# 设置显示名称
nssm set Nginx DisplayName "Nginx Web Server"

# 设置启动类型为自动
nssm set Nginx Start SERVICE_AUTO_START

# 配置日志重定向
nssm set Nginx AppStdout "D:\nginx\logs\service-stdout.log"
nssm set Nginx AppStderr "D:\nginx\logs\service-stderr.log"

# 配置失败时自动重启
nssm set Nginx AppExit Default Restart
nssm set Nginx AppRestartDelay 5000

# 启动服务
nssm start Nginx
相关推荐
晚霞的不甘27 分钟前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
喵叔哟38 分钟前
06-ASPNETCore-WebAPI开发
服务器·后端·c#
Charlie_lll1 小时前
力扣解题-移动零
后端·算法·leetcode
打工的小王2 小时前
Spring Boot(三)Spring Boot整合SpringMVC
java·spring boot·后端
80530单词突击赢4 小时前
JavaWeb进阶:SpringBoot核心与Bean管理
java·spring boot·后端
爬山算法4 小时前
Hibernate(87)如何在安全测试中使用Hibernate?
java·后端·hibernate
WeiXiao_Hyy4 小时前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
苏渡苇4 小时前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
long3164 小时前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
rannn_1115 小时前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习