fix: harden official resource sync retries

This commit is contained in:
2026-07-07 01:14:54 +08:00
parent e0d43fb994
commit b2d6871926
14 changed files with 333 additions and 72 deletions
+2 -2
View File
@@ -157,7 +157,7 @@ target/release/bat-official-sync
--watch
```
`--watch` 是 Rust 内部持久检查模式,默认每 1 小时执行一次检查。远端和本地一致时默认静默;有远端变化或本地文件损坏时自动下载或 repair,并输出 JSON report。
`--watch` 是 Rust 内部持久检查模式,正常情况下默认每 1 小时执行一次检查。远端和本地一致时默认静默;有远端变化或本地文件损坏时自动下载或 repair,并输出 JSON report。下载、发现或校验失败时默认 60 秒后重试,可显式加 `--error-retry 60s``--error-retry-seconds 60` 调整。
### systemd service 示例
@@ -173,7 +173,7 @@ Wants=network-online.target
Type=simple
User=bat
Group=bat
ExecStart=/opt/bluearchive-toolkit/bin/bat-official-sync --auto-discover --platforms Windows,Android --output /var/lib/bluearchive-toolkit/official --watch
ExecStart=/opt/bluearchive-toolkit/bin/bat-official-sync --auto-discover --platforms Windows,Android --output /var/lib/bluearchive-toolkit/official --watch --error-retry 60s
Restart=on-failure
RestartSec=30
StateDirectory=bluearchive-toolkit
+3 -2
View File
@@ -225,10 +225,11 @@ cargo run -p bat-infrastructure --bin bat-official-sync -- \
--platforms Windows,Android \
--output /tmp/ba-official-update \
--watch \
--interval 30m
--interval 30m \
--error-retry 60s
```
命令成功时 stdout 输出稳定 JSON report;错误时 stderr 输出 JSON error。普通错误 exit `1`,状态目录锁冲突 exit `75`
`--interval` 是正常检查周期,默认 `1h``--error-retry` 是下载、发现或校验失败后的重试周期,默认 `60s`,也可以用 `--error-retry-seconds 60`命令成功时 stdout 输出稳定 JSON report;错误时 stderr 输出 JSON errorwatch 模式下错误 JSON 的 `next_retry_seconds` 使用失败重试周期。普通错误 exit `1`,状态目录锁冲突 exit `75`
生产可以直接运行 `--watch`,也可以用 systemd service、容器或 Go 进程守护它。cron/systemd timer 仍可调用单次模式,但不再是 Rust 自动更新的唯一方式。项目是否热更新、热重载或重启进程,由上层业务集成决定。生产目录应使用独立输出目录,不要指向现有客户端或人工维护的资源目录。非 dry-run 每轮会创建 `--output/.official-sync.lock`,防止并发写同一状态目录。