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
相关推荐
00后程序员2 小时前
Objective-C 测试(OC 测试)指南 从单元测试到性能调优的多工具协同方法
后端
天道佩恩2 小时前
MapStruct转换实体
java·后端
Asthenia04122 小时前
技术复盘:Solon-MCP 日志统一配置背后的技术架构分析
后端
小希smallxi2 小时前
在 Spring Boot 项目中,如何在非 Web 层(如 AOP)中获取 Session 信息
前端·spring boot·后端
00后程序员2 小时前
iOS 商店上架全流程解析 从工程准备到审核通过的系统化实践指南
后端
申阳2 小时前
Day 14:个人开发者的 Cloudflare 通关指南-将域名托管到 Cloudflare
前端·后端·程序员
申阳2 小时前
Day 13:个人开发者的 Cloudflare 通关指南-R2对象存储搭建高速免费图床
前端·后端·程序员
iOS开发上架哦3 小时前
Charles 抓不到包怎么办?从 HTTPS 分析到 TCP 抓包的全流程排查指南
后端
bcbnb3 小时前
App Store 软件上架需要多久?从构建到审核通过的全流程时长解析与影响因素分析
后端