# Windows 服务管理工具 NSSM 使用简介

NSSM(Non-Sucking Service Manager)是一个轻量级的Windows服务管理工具,可以将几乎任何程序作为Windows服务运行。与Windows自带的服务管理工具相比,NSSM在稳定性、易用性和功能上都有一定的优势。下面将详细介绍NSSM的安装、使用流程,包括常见命令、配置项以及日志处理。

# 一、NSSM下载安装

# 1、地址

官方网站:https://nssm.cc/ (opens new window)

GitHub:https://github.com/kohsuke/nssm (opens new window)

# 2、安装

NSSM无需安装,下载压缩包后解压即可使用。根据Windows系统的位数选择对应版本(32位或64位)下载并解压,然后设置环境变量即可。

# 二、 使用NSSM创建服务

NSSM的核心命令是nssm install,通过该命令可以将程序注册为Windows服务。基本命令格式如下:

nssm install <ServiceName> <PathToExecutable> [<Arguments>]
  • <ServiceName>:指定服务的名称。
  • <PathToExecutable>:要作为服务运行的可执行文件路径。
  • <Arguments>:可选参数,指定要传递给可执行文件的参数。

# 示例

假设希望将myapp.exe注册为服务,并传递-config参数:

nssm install MyAppService "C:\Program Files\MyApp\myapp.exe" -config "C:\Program Files\MyApp\config.ini"

# 三、 启动、停止与卸载服务

# 1、启动服务

服务安装完成后,可以通过 nssm start 命令启动服务:

nssm start MyAppService

# 2、停止服务

使用 nssm stop 命令停止服务:

nssm stop MyAppService

# 3、卸载服务

使用 nssm remove 命令卸载服务,基本命令格式如下:

nssm remove <ServiceName> [confirm]
  • <ServiceName>:要卸载的服务名称。
  • [confirm]:可选参数,如果添加此参数,NSSM 将无需再次确认即直接删除服务。

# 示例

卸载服务,且无需确认:

nssm remove MyAppService confirm

# 四、NSSM 的附加命令

NSSM 提供了一些额外的命令来管理和调试服务,以下是常用的附加命令:

# nssm edit

编辑现有服务的配置。执行后会弹出一个窗口,用户可以修改服务的设置。

nssm edit <ServiceName>

# nssm dump

显示服务的当前配置,帮助用户查看服务的所有设置。

nssm dump <ServiceName>

# nssm get

获取某一配置项的当前值,查看服务的配置。

nssm get <ServiceName> <Option>

# nssm set

设置或修改某个配置项的值。命令格式如下:

nssm set <ServiceName> <Option> <Value>

# nssm reset

重置服务的所有配置为默认值。

nssm reset <ServiceName>

# nssm restart

重启服务。

nssm restart <ServiceName>

# nssm status

显示服务的当前状态,如是否正在运行。

nssm status <ServiceName>

# nssm rotate

轮换日志文件。

nssm rotate <ServiceName>

# nssm processes

查看与服务相关的进程信息。

nssm processes <ServiceName>

# 五、设置日志输出目录

如果希望记录程序的标准输出和错误输出,可以通过 AppStdoutAppStderr 设置日志文件路径。例如:

nssm install MyAppService "C:\Path\To\myapp.exe"
nssm set MyAppService AppStdout "C:\Path\To\logs\stdout.log"
nssm set MyAppService AppStderr "C:\Path\To\logs\stderr.log"

也可以通过 nssm edit 命令,在弹出的编辑对话框中手工进行配置。

如果没有设置日志文件路径,默认情况下,标准输出和错误输出将会被重定向到 NUL 设备,即丢弃所有输出内容,不会保存到文件中。

# 六、常见配置项(Options)

在使用 nssm set 命令时,可以设置以下配置项:

  • AppDirectory:指定服务的工作目录。
  • AppStdout:设置标准输出日志文件路径。
  • AppStderr:设置标准错误输出日志文件路径。
  • AppExit:设置程序退出时的行为。
  • AppParameters:设置传递给程序的启动参数。
  • AppPath:设置可执行文件的路径。
  • AppShutdown:设置服务关闭时的行为。
  • AppRestart:设置崩溃时的自动重启策略。
  • AppStop:设置停止服务的超时时间。
  • AppEnv:设置环境变量。
  • AppKill:设置终止应用程序时的行为。
  • AppAllowService:允许或禁止服务的运行。
  • AppVerb:设置应用程序的执行方式。
  • AppNoConsole:设置程序在启动时是否显示控制台窗口。
  • AppPriority:设置程序的优先级。
  • AppAffinity:设置程序的处理器亲和力。
  • AppTimeout:设置服务启动时的超时时间。
  • AppTerminate:设置停止服务时强制终止程序的超时时间。
  • AppTrigger:设置特定的触发器。
  • AppWorkingDirectory:设置应用程序的工作目录。

# 七、NSSM 的优势与不足

# 优势

  • 易用性:NSSM 命令简洁,易于使用。通过命令行即可快速将程序注册为 Windows 服务;
  • 稳定性:NSSM 能够稳定地管理任何程序的运行,包括不具备原生服务支持的应用程序;
  • 重启功能:NSSM 具有内建的重启机制,可以根据配置自动重启服务,在服务崩溃时保证服务持续运行;
  • 日志管理:可以配置将服务的输出记录到日志文件中,方便调试与管理。

# 不足

  • 没有图形化界面:虽然 NSSM 提供了命令行界面,但对于不熟悉命令行的用户来说,操作起来可能不够直观;
  • 不支持复杂的服务依赖关系:NSSM 不提供原生的服务依赖关系管理功能,可能不适用于一些复杂的服务管理场景;
  • 只能在Windows平台使用:NSSM 专为 Windows 设计,不支持 Linux 或 macOS 等其他操作系统。