NSSM批处理脚本一键部署若依.NET8(UMP‑API)Windows服务
NSSM批处理脚本一键部署若依.NET8(UMP‑API)Windows服务
实现两个脚本:
install‑ump‑service.bat(安装注册服务)、restart‑ump‑service.bat(重启服务),无需手动点NSSM图形界面,管理员双击脚本完成服务安装配置。
目录布局规划
项目根目录:D:\ump\
D:\ump\
├─ install-ump-service.bat # 安装服务脚本
├─ restart-ump-service.bat # 重启服务脚本
├─ nssm.exe # NSSM工具64位程序
├─ app\ # .NET8若依后端发布输出目录
│ └─ RuoYi.Admin.exe # 后端主程序
└─ logs\ # 服务标准输出、错误日志目录(脚本自动创建)
⚠️重要:两个bat脚本必须放在D:\ump\根目录,不要放到app子文件夹;运行脚本必须右键【以管理员身份运行】。
脚本1:install‑ump‑service.bat(安装注册服务)
文件名:install‑ump‑service.bat
@echo off
rem ============================================================
rem Install UMP backend as a Windows service (NSSM, run as Administrator)
rem Layout: this script sits in D:\ump\ together with:
rem app\ backend publish output (contains RuoYi.Admin.exe)
rem nssm.exe NSSM tool
rem Logs go to D:\ump\logs\
rem ============================================================
set BASE=%~dp0
set SERVICE=UMP-API
if not exist "%BASE%nssm.exe" (
echo [ERROR] %BASE%nssm.exe not found. Put NSSM there first.
pause & exit /b 1
)
if not exist "%BASE%app\RuoYi.Admin.exe" (
echo [ERROR] %BASE%app\RuoYi.Admin.exe not found. Put backend publish output there.
pause & exit /b 1
)
if not exist "%BASE%logs" mkdir "%BASE%logs"
rem remove old service if exists
nssm stop %SERVICE% >nul 2>&1
nssm remove %SERVICE% confirm >nul 2>&1
nssm install %SERVICE% "%BASE%app\RuoYi.Admin.exe"
nssm set %SERVICE% AppDirectory "%BASE%app"
nssm set %SERVICE% AppEnvironmentExtra ASPNETCORE_ENVIRONMENT=Production ASPNETCORE_URLS=[http://127.0.0.1:5008](http://127.0.0.1:5008)
nssm set %SERVICE% AppStdout "%BASE%logs\api-out.log"
nssm set %SERVICE% AppStderr "%BASE%logs\api-err.log"
nssm set %SERVICE% AppRotateFiles 1
nssm set %SERVICE% Start SERVICE_AUTO_START
nssm start %SERVICE%
echo.
echo Service %SERVICE% started, listening on [http://127.0.0.1:5008](http://127.0.0.1:5008)
echo Verify: curl [http://127.0.0.1:5008/captchaImage](http://127.0.0.1:5008/captchaImage)
pause
脚本逻辑说明
set BASE=%~dp0获取脚本所在根目录,不写死绝对路径,脚本移动位置也可以运行;- 前置校验:检测nssm.exe、后端exe是否存在,缺失直接报错退出;
- 自动创建logs日志文件夹;
- 先停止+卸载旧服务,避免重复注册;
- NSSM命令行配置全部参数:
- 工作目录指向
app发布目录 - 环境变量:生产模式
Production,监听地址[http://127.0.0.1:5008](http://127.0.0.1:5008) - 标准输出、错误输出日志分别写入
api-out.log、api-err.log,开启日志轮转 - 设置服务启动类型:自动开机启动
- 工作目录指向
- 安装完成自动启动服务,给出验证访问命令。
如果需要外部机器访问,把环境变量里面地址改为
[http://0.0.0.0:5008](http://0.0.0.0:5008)。
脚本2:restart‑ump‑service.bat(重启服务脚本)
文件名:restart‑ump‑service.bat
@echo off
rem ============================================================
rem Restart UMP backend service and verify (run as Administrator)
rem Usage: restart-ump-service.bat (keep this file next to nssm.exe, e.g. D:\ump\)
rem Notes:
rem - appsettings*.json changed: run this script
rem - nginx conf changed: run in nginx dir "nginx -t" then "nginx -s reload" (no restart)
rem - frontend dist replaced: nothing to restart, hard-refresh browser (Ctrl+F5)
rem ============================================================
set SERVICE=UMP-API
set BASE=%~dp0
"%BASE%nssm.exe" status %SERVICE% >nul 2>&1
if errorlevel 1 (
echo [ERROR] service %SERVICE% not found. Run install-ump-service.bat first.
pause & exit /b 1
)
echo Restarting %SERVICE% ...
"%BASE%nssm.exe" restart %SERVICE%
if errorlevel 1 (
echo [ERROR] restart failed. Check logs: %BASE%logs\api-err.log
pause & exit /b 1
)
rem give kestrel a few seconds to bind the port
timeout /t 5 /nobreak >nul
"%BASE%nssm.exe" status %SERVICE%
echo.
echo Listening check on port 5008:
netstat -ano | findstr ":5008" | findstr "LISTENING"
if errorlevel 1 (
echo [WARN] port 5008 not listening yet, check %BASE%logs\api-err.log
) else (
echo OK. API is up on [http://127.0.0.1:5008](http://127.0.0.1:5008)
)
pause
脚本逻辑说明
- 校验服务是否已经注册,未注册提示先执行安装脚本;
- 调用NSSM重启服务;重启失败提示查看错误日志;
- 等待5秒等待Kestrel完成端口绑定;
- 使用
netstat检测5008端口是否处于监听状态,输出状态; - 使用场景:修改
appsettings.json配置、替换后端发布文件后执行此脚本; - 备注提示:Nginx修改配置只reload,前端静态资源更新浏览器Ctrl+F5硬刷新,不需要重启后端服务。
使用操作步骤
- 把NSSM的64位
nssm.exe放到D:\ump\根目录; - 将.NET8若依后端发布全部输出拷贝到
D:\ump\app\; - 将上面两个bat脚本保存到
D:\ump\根目录; - 右键
install‑ump‑service.bat→ 以管理员身份运行,自动完成注册并启动服务; - 修改配置/更新后端程序:先停止服务,覆盖app目录文件,执行
restart‑ump‑service.bat; - 查看日志:
D:\ump\logs\api‑err.log排查启动报错。
常用补充命令(管理员cmd)
# 查看服务状态
nssm status UMP-API
# 手动停止服务
nssm stop UMP-API
# 手动卸载服务
nssm remove UMP-API confirm
踩坑要点
- 脚本必须管理员权限运行,否则注册Windows服务会失败;
- 默认监听
127.0.0.1仅本机访问,外网访问改为0.0.0.0:5008,放行防火墙5008端口; - 服务启动失败优先看
api‑err.log,常见原因:数据库连接错误、端口占用、配置文件错误; - 更新程序:不要直接覆盖文件,先停止服务,替换完成后再重启。
全部直接复制粘贴博客园Markdown即可发布。

浙公网安备 33010602011771号