|
|
@@ -0,0 +1,125 @@
|
|
|
+@echo off
|
|
|
+chcp 65001 >nul
|
|
|
+setlocal EnableDelayedExpansion
|
|
|
+
|
|
|
+rem Set basic variables
|
|
|
+set "SCRIPT_DIR=%~dp0"
|
|
|
+set "LOG_DIR=%SCRIPT_DIR%logs"
|
|
|
+set "BACKEND_PID_FILE=%SCRIPT_DIR%backend.pid"
|
|
|
+
|
|
|
+if not exist "%LOG_DIR%" mkdir "%LOG_DIR%"
|
|
|
+set "LOG_FILE=%LOG_DIR%\server_%date:~0,4%%date:~5,2%%date:~8,2%.log"
|
|
|
+
|
|
|
+rem Clean up old processes and files
|
|
|
+taskkill /F /IM python.exe /FI "WINDOWTITLE eq OpenWebUI*" >nul 2>&1
|
|
|
+timeout /t 2 >nul
|
|
|
+
|
|
|
+if exist "%BACKEND_PID_FILE%" del "%BACKEND_PID_FILE%"
|
|
|
+
|
|
|
+goto :main
|
|
|
+
|
|
|
+:write_log
|
|
|
+echo [%date% %time%] %~1
|
|
|
+echo [%date% %time%] %~1 >> "%LOG_FILE%"
|
|
|
+exit /b
|
|
|
+
|
|
|
+:start_backend
|
|
|
+cd /d "%SCRIPT_DIR%backend"
|
|
|
+call :write_log "Starting backend service..."
|
|
|
+start "OpenWebUI Backend" /B cmd /c start_windows.bat
|
|
|
+if errorlevel 1 (
|
|
|
+ call :write_log "Failed to start backend"
|
|
|
+ exit /b 1
|
|
|
+)
|
|
|
+
|
|
|
+timeout /t 5 >nul
|
|
|
+
|
|
|
+for /f "tokens=2" %%a in ('wmic process where "commandline like '%%python%%' and name='python.exe'" get processid ^| findstr /r "[0-9]"') do (
|
|
|
+ echo %%a > "%BACKEND_PID_FILE%"
|
|
|
+ call :write_log "Backend started with PID: %%a"
|
|
|
+ exit /b 0
|
|
|
+)
|
|
|
+
|
|
|
+call :write_log "Failed to get backend PID"
|
|
|
+exit /b 1
|
|
|
+
|
|
|
+:start
|
|
|
+call :write_log "Starting backend service..."
|
|
|
+
|
|
|
+call conda activate open-webui
|
|
|
+if errorlevel 1 (
|
|
|
+ call :write_log "Failed to activate conda environment"
|
|
|
+ goto :cleanup
|
|
|
+)
|
|
|
+
|
|
|
+call :start_backend
|
|
|
+if errorlevel 1 goto :cleanup
|
|
|
+
|
|
|
+cd /d "%SCRIPT_DIR%"
|
|
|
+call :write_log "Backend service started successfully"
|
|
|
+exit /b 0
|
|
|
+
|
|
|
+:cleanup
|
|
|
+call :write_log "Start failed, cleaning up..."
|
|
|
+call :stop
|
|
|
+exit /b 1
|
|
|
+
|
|
|
+:stop
|
|
|
+call :write_log "Stopping services..."
|
|
|
+
|
|
|
+if exist "%BACKEND_PID_FILE%" (
|
|
|
+ for /f %%a in (%BACKEND_PID_FILE%) do (
|
|
|
+ taskkill /F /T /PID %%a >nul 2>&1
|
|
|
+ if not errorlevel 1 call :write_log "Stopped backend process (PID: %%a)"
|
|
|
+ )
|
|
|
+ del "%BACKEND_PID_FILE%"
|
|
|
+)
|
|
|
+
|
|
|
+for /f "tokens=2" %%a in ('wmic process where "commandline like '%%python%%' and name='python.exe'" get processid ^| findstr /r "[0-9]"') do (
|
|
|
+ taskkill /F /T /PID %%a >nul 2>&1
|
|
|
+ call :write_log "Stopped additional Python process (PID: %%a)"
|
|
|
+)
|
|
|
+
|
|
|
+call :write_log "All services stopped"
|
|
|
+exit /b 0
|
|
|
+
|
|
|
+:status
|
|
|
+set "running=0"
|
|
|
+
|
|
|
+if exist "%BACKEND_PID_FILE%" (
|
|
|
+ for /f %%a in (%BACKEND_PID_FILE%) do (
|
|
|
+ tasklist /FI "PID eq %%a" 2>nul | find "%%a" >nul
|
|
|
+ if not errorlevel 1 (
|
|
|
+ call :write_log "Backend is running (PID: %%a)"
|
|
|
+ set /a running+=1
|
|
|
+ )
|
|
|
+ )
|
|
|
+)
|
|
|
+
|
|
|
+if %running% equ 1 (
|
|
|
+ call :write_log "Backend service is running"
|
|
|
+ exit /b 0
|
|
|
+) else (
|
|
|
+ call :write_log "Backend service is not running"
|
|
|
+ exit /b 1
|
|
|
+)
|
|
|
+
|
|
|
+:main
|
|
|
+if "%1"=="" (
|
|
|
+ echo Usage: %~nx0 {start^|stop^|status}
|
|
|
+ exit /b 1
|
|
|
+)
|
|
|
+
|
|
|
+if "%1"=="start" (
|
|
|
+ call :stop
|
|
|
+ timeout /t 2 >nul
|
|
|
+ call :start
|
|
|
+) else if "%1"=="stop" (
|
|
|
+ call :stop
|
|
|
+) else if "%1"=="status" (
|
|
|
+ call :status
|
|
|
+) else (
|
|
|
+ echo Invalid command. Use: %~nx0 {start^|stop^|status}
|
|
|
+ exit /b 1
|
|
|
+)
|
|
|
+exit /b %errorlevel%
|