Files
Scoreboard/deploy/backup.bat
T
AskaEth 7f9701c465 fix: 审查修复波次(P0x4 + P1x30+)
- domain/rules: 计分与排名解耦、破纪录按组别、tieBreak 生效、调整分不丢、移除 aggregate 假能力
- realtime: 新建 internal/dto,快照三项契约对齐,/ws 只认会话身份
- httpapi: 流水幂等、standings 整表载荷、广播接线、强制改密、XFF 防伪造、records 写入、审计、赛事包内容、发布前备份、result.points、实例列表
- web: FormData 上传、YAML 解析、快照归一化、大屏解析层、bootstrap 降级、访客判定、主题切换
- console: 优雅关闭握手、中文化、免验证改管理员账号、选屏与日志轮转修复
- docs: 用户文档三份 + README
- 主代理: 破纪录加分接线(levels 未加载导致恒 0)
2026-09-09 21:06:40 +08:00

86 lines
2.9 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
REM ============================================================================
REM Scoreboard 一键备份(Windows)
REM
REM 调用 scoreboard.exe 的 backup 子命令(内置 VACUUM INTO),服务运行中也能
REM 安全执行,不需要停服务、不依赖外部 sqlite3.exe。
REM 产物落在 data\backups\,服务端按库(system / 各赛事)各自滚动保留 20 份。
REM 注意:只快照 .db,不含 event_projs\<项目>\uploads\ 里的背景图/会标等资源;
REM 需要连资源一起留档时,请另行拷贝 data\event_projs\<项目>\uploads\。
REM
REM 用法:deploy\backup.bat 手动备份(原因记 manual)
REM deploy\backup.bat publish 发布前备份(原因记 publish)
REM ============================================================================
setlocal enabledelayedexpansion
chcp 65001 >nul 2>&1
cd /d "%~dp0.."
set "ROOT=%CD%"
set "DATA=%ROOT%\data"
set "REASON=manual"
if not "%~1"=="" set "REASON=%~1"
set "REASON=%REASON: =_%"
set "REASON=%REASON:/=-%"
set "REASON=%REASON:\=-%"
set "REASON=%REASON:"=%"
if not exist "%DATA%" (
echo [错误] 找不到数据目录:%DATA%
echo 请在项目根目录执行本脚本。
exit /b 1
)
REM ---- 定位 scoreboard.exe ----------------------------------------------------
set "EXE="
if exist "%~dp0..\dist\scoreboard.exe" set "EXE=%~dp0..\dist\scoreboard.exe"
if not defined EXE if exist "%ROOT%\scoreboard.exe" set "EXE=%ROOT%\scoreboard.exe"
if not defined EXE if exist "%~dp0scoreboard.exe" set "EXE=%~dp0scoreboard.exe"
if not defined EXE for %%I in (scoreboard.exe) do if exist "%%~$PATH:I" set "EXE=%%~$PATH:I"
if not defined EXE (
echo [错误] 找不到 scoreboard.exe。
echo 请先执行 deploy\build.bat,或把它放到项目根目录 / 加入 PATH。
exit /b 1
)
REM dataDir 是相对路径,服务端按当前工作目录解析,所以必须在项目根目录调用
if not exist "%ROOT%\config.yaml" (
echo [错误] 找不到 %ROOT%\config.yaml,无法定位 dataDir。
exit /b 1
)
echo === Scoreboard 备份 ===
echo 数据目录:%DATA%
echo 服务端 :%EXE%
echo 原因 :%REASON%
echo.
set /a OK=0
set /a FAIL=0
REM 服务端一次只备份一个赛事库(system.db 每次都会一并快照),按目录逐个调用;
REM 部署形态通常只有一个 default 项目,这里就只跑一次。
set "FOUND="
for /d %%D in ("%DATA%\event_projs\*") do (
set "FOUND=1"
echo 备份赛事 %%~nxD
"%EXE%" backup -config config.yaml -project "%%~nxD" -reason "%REASON%"
if errorlevel 1 (set /a FAIL+=1) else (set /a OK+=1)
)
if not defined FOUND (
echo 备份默认赛事
"%EXE%" backup -config config.yaml -reason "%REASON%"
if errorlevel 1 (set /a FAIL+=1) else (set /a OK+=1)
)
echo.
echo === 备份完成:成功 !OK! 个,失败 !FAIL! 个 ===
dir /b "%DATA%\backups\*.db" 2>nul
if !FAIL! GTR 0 (
endlocal
exit /b 1
)
endlocal
exit /b 0