Files
NewStock/qmt/start.bat
2026-01-04 23:11:15 +08:00

84 lines
2.5 KiB
Batchfile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
:: ================= 配置选项 =================
:: 1. 自动获取当前脚本所在目录
set "WORK_DIR=%~dp0"
:: 2. 设置启动文件
set "SCRIPT_NAME=run.py"
:: 3. 失败重启配置
set MAX_RETRIES=10
set RETRY_COUNT=0
set RETRY_WAIT=15
:: 4. 日志配置
set "LOG_DIR=%WORK_DIR%logs\launcher"
:: ===========================================
cd /d "%WORK_DIR%"
title QMT 自动化交易系统 [监控中]
if not exist "%LOG_DIR%" mkdir "%LOG_DIR%"
:: 优化日期获取逻辑,防止由于区域设置导致的非法文件名字符
for /f "tokens=1-3 delims=-/ " %%a in ("%date%") do (
set "Y=%%a"
set "M=%%b"
set "D=%%c"
)
set "TODAY=%Y%-%M%-%D%"
set "LOG_FILE=%LOG_DIR%\launcher_%TODAY%.log"
cls
echo ==================================================
echo QMT 交易系统守护进程启动
echo 工作目录: %WORK_DIR%
echo 启动文件: %SCRIPT_NAME%
echo 监控地址: http://localhost:8001
echo 日志文件: %LOG_FILE%
echo ==================================================
:LOOP
if %RETRY_COUNT% GEQ %MAX_RETRIES% (
echo [%time%] !!! 达到最大重试次数,系统停止重启 !!! >> "%LOG_FILE%"
color 0C
echo 错误: 系统多次崩溃,请检查日志后手动重启。
msg * "QMT 系统异常崩溃且无法自动恢复,请检查日志!"
goto FAIL
)
echo [%time%] 正在启动交易引擎 (第 %RETRY_COUNT% 次重启)...
:: 注意:这里将 >>> 改成了 ^>^>^> 进行转义,或者直接改用 ===
echo [%time%] ^>^>^> 启动子进程: uv run %SCRIPT_NAME% >> "%LOG_FILE%"
:: 启动程序 (使用 -u 参数确保输出实时刷新到日志)
:: 如果你没有安装 uv请将 uv run 改为 python
uv run python -u %SCRIPT_NAME% >> "%LOG_FILE%" 2>&1
set EXIT_CODE=%errorlevel%
if %EXIT_CODE% EQU 0 (
echo [%time%] 程序正常关闭。 >> "%LOG_FILE%"
echo 程序运行结束。
pause
exit /b 0
)
set /a RETRY_COUNT+=1
echo [%time%] 程序异常退出Code: %EXIT_CODE% >> "%LOG_FILE%"
echo --------------------------------------------------
echo [%time%] 警告: 进程意外中断! (退出码: %EXIT_CODE%)
echo [%time%] 将在 %RETRY_WAIT% 秒后尝试第 %RETRY_COUNT% 次重启...
echo --------------------------------------------------
timeout /t %RETRY_WAIT% >nul
goto LOOP
:FAIL
title QMT 系统已停机
echo.
echo ==========================================
echo 守护进程已停止。
echo 请查看日志: %LOG_FILE%
echo ==========================================
pause
exit /b 1