fix(scripts): 修复 Windows 启动脚本兼容性和稳定性问题
- start.bat: 移除后端日志文件重定向,避免文件锁定导致启动失败 - start.bat: 用 ping 替代 timeout,修复 PowerShell 下错误 - start.bat: 健康检查改为 health 接口,提升可靠性 - start.bat: 修复前端 cd 路径带空格时的引号嵌套问题,使用 /B 在当前窗口后台运行 - stop.bat: 同样用 ping 替代 timeout 提升兼容性
This commit is contained in:
@@ -11,11 +11,11 @@ REM 1. Clean processes on ports
|
|||||||
echo [1/4] Cleaning old processes...
|
echo [1/4] Cleaning old processes...
|
||||||
for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":%BACKEND_PORT%" ^| findstr "LISTENING"') do (
|
for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":%BACKEND_PORT%" ^| findstr "LISTENING"') do (
|
||||||
taskkill /F /PID %%a >nul 2>&1
|
taskkill /F /PID %%a >nul 2>&1
|
||||||
echo Stopped port %BACKEND_PORT% (PID: %%a)
|
echo Stopped backend (PID: %%a)
|
||||||
)
|
)
|
||||||
for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":%FRONTEND_PORT%" ^| findstr "LISTENING"') do (
|
for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":%FRONTEND_PORT%" ^| findstr "LISTENING"') do (
|
||||||
taskkill /F /PID %%a >nul 2>&1
|
taskkill /F /PID %%a >nul 2>&1
|
||||||
echo Stopped port %FRONTEND_PORT% (PID: %%a)
|
echo Stopped frontend (PID: %%a)
|
||||||
)
|
)
|
||||||
echo Cleanup complete!
|
echo Cleanup complete!
|
||||||
echo.
|
echo.
|
||||||
@@ -33,12 +33,11 @@ if exist "%ROOT_PATH%\venv\Scripts\python.exe" (
|
|||||||
cd /d "%ROOT_PATH%"
|
cd /d "%ROOT_PATH%"
|
||||||
set "PYTHONIOENCODING=utf-8"
|
set "PYTHONIOENCODING=utf-8"
|
||||||
|
|
||||||
REM Clear old logs
|
REM Ensure logs directory exists (used by application logger)
|
||||||
if exist "%ROOT_PATH%\logs\backend_startup.log" del /f "%ROOT_PATH%\logs\backend_startup.log" >nul 2>&1
|
mkdir "%ROOT_PATH%\logs" 2>nul
|
||||||
if exist "%ROOT_PATH%\logs\backend_error.log" del /f "%ROOT_PATH%\logs\backend_error.log" >nul 2>&1
|
|
||||||
|
|
||||||
REM Start backend
|
REM Start backend in background of current console
|
||||||
start /B "" "%PYTHON_PATH%" -u main.py >"%ROOT_PATH%\logs\backend_startup.log" 2>"%ROOT_PATH%\logs\backend_error.log"
|
start /B "" "%PYTHON_PATH%" -u main.py
|
||||||
echo Backend started
|
echo Backend started
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
@@ -48,33 +47,25 @@ set RETRY_COUNT=0
|
|||||||
set BACKEND_READY=0
|
set BACKEND_READY=0
|
||||||
|
|
||||||
:WAIT_LOOP
|
:WAIT_LOOP
|
||||||
if %RETRY_COUNT% geq 10 goto WAIT_DONE
|
if %RETRY_COUNT% geq 15 goto WAIT_DONE
|
||||||
timeout /t 2 /nobreak >nul
|
REM Use ping instead of timeout for PowerShell compatibility
|
||||||
|
ping -n 3 127.0.0.1 >nul 2>&1
|
||||||
set /a RETRY_COUNT+=1
|
set /a RETRY_COUNT+=1
|
||||||
|
|
||||||
ping -n 1 127.0.0.1 -w 500 >nul
|
REM Try to connect to backend health endpoint
|
||||||
timeout /t 1 /nobreak >nul
|
powershell -Command "try { $r = Invoke-RestMethod -Uri 'http://127.0.0.1:9949/health' -TimeoutSec 2 -ErrorAction Stop; exit 0 } catch { exit 1 }" >nul 2>&1
|
||||||
|
|
||||||
REM Try to connect to backend
|
|
||||||
powershell -Command "try { $r = Invoke-RestMethod -Uri 'http://127.0.0.1:9949/' -TimeoutSec 2 -ErrorAction Stop; exit 0 } catch { exit 1 }" >nul 2>&1
|
|
||||||
if %errorlevel% equ 0 (
|
if %errorlevel% equ 0 (
|
||||||
set BACKEND_READY=1
|
set BACKEND_READY=1
|
||||||
goto WAIT_DONE
|
goto WAIT_DONE
|
||||||
)
|
)
|
||||||
echo Waiting... (%RETRY_COUNT%/10)
|
echo Waiting... (%RETRY_COUNT%/15)
|
||||||
|
|
||||||
if exist "%ROOT_PATH%\logs\backend_startup.log" (
|
|
||||||
for /f "delims=" %%i in ('powershell -Command "Get-Content '%ROOT_PATH%\logs\backend_startup.log' -Tail 1" 2^>nul') do (
|
|
||||||
echo Log: %%i
|
|
||||||
)
|
|
||||||
)
|
|
||||||
goto WAIT_LOOP
|
goto WAIT_LOOP
|
||||||
|
|
||||||
:WAIT_DONE
|
:WAIT_DONE
|
||||||
if %BACKEND_READY% equ 0 (
|
if %BACKEND_READY% equ 0 (
|
||||||
echo.
|
echo.
|
||||||
echo Backend failed to start!
|
echo Backend failed to start within 30 seconds!
|
||||||
echo Check error log: %ROOT_PATH%\logs\backend_error.log
|
echo Check the console output above for errors.
|
||||||
pause
|
pause
|
||||||
exit /b 1
|
exit /b 1
|
||||||
)
|
)
|
||||||
@@ -83,7 +74,9 @@ echo.
|
|||||||
|
|
||||||
REM 4. Start Frontend
|
REM 4. Start Frontend
|
||||||
echo [4/4] Starting frontend (Vite)...
|
echo [4/4] Starting frontend (Vite)...
|
||||||
start /B "" cmd /c "cd /d "%ROOT_PATH%\frontend" && npm run dev" >nul 2>&1
|
cd /d "%ROOT_PATH%\frontend"
|
||||||
|
start /B "" cmd /c "npm run dev"
|
||||||
|
cd /d "%ROOT_PATH%"
|
||||||
echo Frontend started
|
echo Frontend started
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
@@ -91,5 +84,5 @@ echo === All services started ===
|
|||||||
echo Backend: http://127.0.0.1:9949
|
echo Backend: http://127.0.0.1:9949
|
||||||
echo Frontend: http://localhost:9948
|
echo Frontend: http://localhost:9948
|
||||||
echo.
|
echo.
|
||||||
echo Please open frontend in browser
|
echo Press any key to close this window (services will keep running).
|
||||||
timeout /t 5 >nul
|
pause >nul
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ echo Stopped %STOPPED_COUNT% process(es)
|
|||||||
echo.
|
echo.
|
||||||
|
|
||||||
echo [2/2] Waiting for processes to fully stop...
|
echo [2/2] Waiting for processes to fully stop...
|
||||||
timeout /t 2 /nobreak >nul
|
REM Use ping instead of timeout for PowerShell compatibility
|
||||||
|
ping -n 3 127.0.0.1 >nul 2>&1
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo === Done ===
|
echo === Done ===
|
||||||
|
|||||||
Reference in New Issue
Block a user