首先,要注意一个关键问题,不要在nssm中直接调用bat
-
NSSM 与 Bat 文件的问题:当NSSM启动一个批处理文件(.bat)时,它实际启动的是
cmd.exe
进程,而批处理中的命令(如minio.exe
)则是其子进程。NSSM会监视cmd.exe
的状态。一旦批处理中的命令执行完毕,cmd.exe
进程就会退出,NSSM会认为服务已停止,从而可能尝试重启它,但这会导致进程管理混乱。更糟糕的是,直接关闭服务时,NSSM只能终止cmd.exe
,而无法正确终止真正的目标进程(minio.exe
),导致进程残留。 -
MinIO 的特殊性:MinIO Server确实设计为需要在命令行环境中运行,因为它需要持续地输出日志和状态信息。
最佳解决方案:使用 NSSM 直接运行 minio.exe,并正确配置参数
我们不需要批处理文件。正确的方法是将NSSM的启动路径直接指向minio.exe
,并将所有原本写在批处理文件中的参数和命令,全部放在NSSM的Arguments
配置里。
以下是详细步骤:
第一步:准备目录和文件
假设你的软件布局如下:
├── Apps │ ├── MinIO/ │ │ └── minio.exe # MinIO 主程序 │ ├── SRS/ │ │ └── objs/ │ │ └── srs.exe # SRS 主程序 │ └── NSSM/ │ └── nssm.exe # NSSM 工具 ├── Data │ └── MinIO/ # MinIO 数据目录 └── Logs├── MinIO/ # MinIO 服务日志└── SRS/ # SRS 服务日志
请提前创建好这些目录(如C:\Data\MinIO
, C:\Logs\MinIO
, C:\Logs\SRS
)。
第二步:以管理员身份启动命令行
右键点击“命令提示符”或“PowerShell”,选择“以管理员身份运行”。
第三步:安装并配置 MinIO 服务
我们使用NSSM的命令行模式进行安装,这样更清晰、可重复。
# 进入NSSM目录(或者如果你已将其加入系统PATH,则无需此行) cd C:\Apps\NSSM# 安装服务,并设置可执行文件路径 nssm install MinIO "C:\Apps\MinIO\minio.exe"# 设置服务启动目录(非常重要) nssm set MinIO AppDirectory "C:\Apps\MinIO"# 设置启动参数:指定数据目录和控制台端口 nssm set MinIO AppParameters "server C:\Data\MinIO --console-address :9001"# 设置显示名称和描述 nssm set MinIO DisplayName "MinIO Object Storage Server" nssm set MinIO Description "High-performance, Kubernetes-native object storage"# 【强烈推荐】配置日志输出,便于排查问题 nssm set MinIO Output "C:\Logs\MinIO\service_out.log" nssm set MinIO Error "C:\Logs\MinIO\service_err.log"# 【可选】设置标准输出和错误输出的文件轮转 nssm set MinIO FileRotate 1 nssm set MinIO FileRotateSize 1048576# 【可选】配置服务在失败时自动重启 nssm set MinIO Start SERVICE_AUTO_START nssm set MinIO ObjectName "NT AUTHORITY\LocalService" ""
第四步:安装并配置 SRS 服务
SRS的配置相对直接,因为它通常只需要一个配置文件参数。
# 安装SRS服务 nssm install SRS "C:\Apps\SRS\objs\srs.exe"# 设置启动目录 nssm set SRS AppDirectory "C:\Apps\SRS\objs"# 设置启动参数(指向配置文件) nssm set SRS AppParameters "-c ..\conf\srs.conf"# 设置显示名称和描述 nssm set SRS DisplayName "SRS Media Server" nssm set SRS Description "Simple, Efficient, and Real-Time Video Server"# 配置日志输出 nssm set SRS Output "C:\Logs\SRS\service_out.log" nssm set SRS Error "C:\Logs\SRS\service_err.log" nssm set SRS FileRotate 1
第五步:启动并测试服务
配置完成后,启动服务并进行测试。
# 启动服务 net start MinIO net start SRS# 检查状态(sc query 命令) sc query MinIO sc query SRS
测试方法:
-
MinIO:打开浏览器,访问
http://localhost:9001
。应该能看到MinIO的登录页面。 -
SRS:可以使用OBS推一个RTMP流到
rtmp://localhost/live/test
,然后用VLC播放器拉流(rtmp://localhost/live/test
)进行测试。 -
检查日志:如果服务启动失败,第一时间查看你在第三步和第四步中设置的
Output
和Error
日志文件(如C:\Logs\MinIO\service_err.log
),里面会有详细的错误信息。