NSSM服务

158 阅读5分钟

一、介绍

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

二、NSSM优点

  1. 自动启动:配置为自动启动后,服务会在系统启动时自动运行,无需用户登录。
  2. 后台运行:程序在后台静默运行,没有用户界面,不占用任务栏位置。
  3. 生命周期管理:可以通过标准的 Windows 服务管理界面(services.msc)或命令行(scnet)方便地启动、停止、重启、暂停服务。
  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_RUNNINGSERVICE_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运行服务所用的账户(如 .\Administrator 或 NT AUTHORITY\SYSTEM)。nssm set MyService ObjectName ".\MyUser"
Type服务类型。绝大多数情况使用 SERVICE_WIN32_OWN_PROCESSnssm set MyService Type SERVICE_WIN32_OWN_PROCESS

五、案例:

5.1、Nginx服务

5.1.1、使用 GUI 界面安装

  1. 安装服务

    nssm install Nginx
    
  2. 在弹出的 GUI 界面中配置:

    Application 标签页

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

    Details 标签页

    • Display nameNginx Web Server (可选,更友好的显示名称)
    • Startup typeAutomatic (设置为自动启动)

    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、完全使用命令行安装(适合脚本化部署)

# 安装服务
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