一、介绍
- 全称:
Non-Sucking Service Manager- 核心功能:将一个普通的
Windows可执行文件(如.exe,.bat,.py,.jar等)封装成一个Windows服务。- 解决的问题:许多应用程序本身并不具备作为
Windows服务运行的能力。NSSM充当一个包装器或守护进程,使这些程序能够以服务的身份在后台运行,并享受服务带来的所有好处。
二、NSSM优点
- 自动启动:配置为
自动启动后,服务会在系统启动时自动运行,无需用户登录。 - 后台运行:程序在后台静默运行,没有用户界面,不占用任务栏位置。
- 生命周期管理:可以通过标准的
Windows服务管理界面(services.msc)或命令行(sc,net)方便地启动、停止、重启、暂停服务。 - 崩溃恢复:可以配置服务在意外退出时自动重启,增强程序的健壮性。
- 统一管理:将所有需要长期运行的程序统一到"服务"中进行管理,规范且高效。
- 权限控制:可以指定服务以特定的用户身份(如
SYSTEM或自定义管理员账户)运行。
三、下载与安装
- 访问官网:nssm.cc/download
- 选择版本:下载最新稳定版(如
nssm 2.24)。根据你的系统架构(32位或64位)选择对应的 ZIP 包。 - 安装:
NSSM是绿色软件,无需安装。只需将ZIP包解压到一个你喜欢的目录,例如D:\nssm。 - 添加到
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 |
运行服务所用的账户(如 .\Administrator 或 NT 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 界面安装
-
安装服务
shellnssm install Nginx -
在弹出的 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 秒重启)
- Restart delay (ms) :
- Path :
-
点击
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