9a4f51d378
Each service wait loop now fails after 30 retries (~60s) instead of spinning forever when a port is occupied by a stuck process. Also added cleanup label that kills partially-started services on failure.
67 lines
2.4 KiB
Batchfile
67 lines
2.4 KiB
Batchfile
@echo off
|
|
chcp 65001 >nul
|
|
setlocal enabledelayedexpansion
|
|
echo ================================================
|
|
echo agent_jrxml 启动 (API + 验证)
|
|
echo ================================================
|
|
cd /d "%~dp0"
|
|
|
|
:: 环境检查
|
|
if not exist "%~dp0.venv\Scripts\python.exe" (
|
|
echo [错误] 未找到 .venv,请先创建虚拟环境
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
:: 清理残留进程
|
|
echo [清理] 检查残留进程...
|
|
for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":8000.*LISTENING"') do (
|
|
taskkill /F /PID %%a >nul 2>&1 && echo 已清理 PID %%a
|
|
)
|
|
for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":8001.*LISTENING"') do (
|
|
taskkill /F /PID %%a >nul 2>&1 && echo 已清理 PID %%a
|
|
)
|
|
echo.
|
|
|
|
:: 启动验证服务 (后台最小化)
|
|
echo [启动] 验证服务 :8001
|
|
start "jrxml-validator" /MIN .venv\Scripts\python.exe -c "import uvicorn; uvicorn.run('validation_service.main:app',host='0.0.0.0',port=8001,reload=False)"
|
|
|
|
:: 等待验证服务就绪 (用 PowerShell 检测)
|
|
echo [等待] 验证服务就绪...
|
|
set /a RETRY=0
|
|
:wait_val
|
|
ping -n 2 127.0.0.1 >nul
|
|
powershell -Command "try{$r=Invoke-WebRequest -Uri http://localhost:8001/health -TimeoutSec 2 -UseBasicParsing;exit 0}catch{exit 1}" >nul 2>&1
|
|
if not errorlevel 1 goto val_ok
|
|
set /a RETRY+=1
|
|
if %RETRY% GEQ 30 (
|
|
echo [失败] 验证服务启动超时,请检查端口 8001 是否被占用
|
|
taskkill /F /FI "WINDOWTITLE eq jrxml-validator*" >nul 2>&1
|
|
for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":8001.*LISTENING"') do taskkill /F /PID %%a >nul 2>&1
|
|
pause
|
|
exit /b 1
|
|
)
|
|
goto wait_val
|
|
:val_ok
|
|
echo :8001 就绪
|
|
|
|
:: 启动 API 服务 (前台,Ctrl+C 退出)
|
|
echo [启动] API 服务 :8000
|
|
echo ================================================
|
|
echo 服务已就绪:
|
|
echo API: http://localhost:8000/docs
|
|
echo 验证: http://localhost:8001/health
|
|
echo 按 Ctrl+C 停止 API 服务
|
|
echo 关闭窗口后会自动清理验证服务
|
|
echo ================================================
|
|
.venv\Scripts\python.exe -c "import uvicorn; uvicorn.run('api_server:app',host='0.0.0.0',port=8000,reload=False)"
|
|
|
|
:: API 进程退出后自动清理
|
|
echo.
|
|
echo [清理] 停止验证服务...
|
|
taskkill /F /FI "WINDOWTITLE eq jrxml-validator*" >nul 2>&1
|
|
for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":8001.*LISTENING"') do taskkill /F /PID %%a >nul 2>&1
|
|
echo 已停止所有服务
|
|
pause
|