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:
祀梦
2026-04-02 22:19:59 +08:00
parent 25bfaf718e
commit df3cc87f88
2 changed files with 21 additions and 27 deletions

View File

@@ -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

View File

@@ -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 ===