【需求】Java每次發布新的版本都需要先kill掉原來的服務,然后再啟動新的包? 有了這個腳本只需要把包替換掉,服務會自動kill??
以6001 為例? 完整的腳本如下
@echo off
REM 檢查端口 6001 是否被占用
netstat -ano | findstr :6001 > nul
IF %ERRORLEVEL% EQU 0 (REM 如果端口被占用,查找并殺死進程FOR /F "tokens=5" %%i in ('netstat -ano ^| findstr :6001') do (echo Killing process with PID %%itaskkill /PID %%i /F)
)REM 啟動新的 Java 服務
java -jar admin.jar --spring.profiles.active=product
腳本解析:
netstat -ano | findstr :6001
:檢查端口 6001 是否被占用。如果端口被占用,則返回進程信息。IF %ERRORLEVEL% EQU 0
:如果端口被占用,繼續執行殺死進程的命令。FOR /F "tokens=5" %%i in ('netstat -ano ^| findstr :6001') do
:查找并獲取占用端口的進程 ID(PID)。taskkill /PID %%i /F
:根據 PID 強制殺死進程。- 最后,啟動新的 Java 服務:
java -jar admin.jar --spring.profiles.active=product
。