步骤4阶段1 D2执行方案 最终确认版 v4

源文件:D:\Hermes\reports\步骤4阶段1_D2执行方案_最终确认版_v4.md · 日期 2026-09-14 · 3KB

D2执行前最后修正(最终确认版 v4)

日期: 2026-09-14
状态: 等待用户最终确认


关键发现:Dead-Man测试机制完整确认 ✅

dead_mans_switch.py的行为

# 从代码分析(227行):
# 1. 检查channel_health表的最新心跳记录
# 2. 如果last_check_time超过30分钟 → 触发告警
# 3. 告警方式:TG + 邮件 + 本地文件
# 4. 独立运行,不依赖alert_channel_health.py

关键逻辑:
  - check_heartbeat() 查询channel_health表
  - 计算elapsed_s = (now - last_check_time).total_seconds()
  - 如果elapsed_s > 1800(30分钟)→ timeout
  - 触发告警

Dead-Man测试正确流程

1. 暂停alert_channel_health的cron(7e8ae2aeca81)
   → channel_health表停止更新

2. 等待30分钟以上
   → last_check_time超过30分钟

3. dead_mans_switch运行(整点调度)
   → 检测到心跳超时
   → 触发告警(TG + 邮件 + 本地文件)

4. 验证告警
   → 检查alerts表
   → 检查dead_mans_switch_alert.txt
   → 检查TG消息

5. 恢复alert_channel_health的cron
   → channel_health表恢复更新
   → dead_mans_switch不再告警

任务1:修正Dead-Man测试步骤 ✅

查找dead_mans_switch的cron_id

wrapper_dead_mans_switch.py 在jobs.json中
需要找到完整的cron_id(16位)

修正后的步骤

时间 步骤 操作
17:25 准备 打印时间戳 [TEST] Dead-Man测试开始
17:26 备份 备份当前channel_health状态
17:27 暂停alert_channel_health hermes cron pause 7e8ae2aeca81
17:28 验证暂停 hermes cron list | grep 7e8ae2aeca81
17:29-17:59 等待30分钟 -
18:00 dead_mans_switch触发 整点运行,检测心跳超时
18:02 验证告警 检查alerts表 + dead_mans_switch_alert.txt
18:05 恢复cron hermes cron resume 7e8ae2aeca81 --run-now
18:10 验证恢复 channel_health表恢复更新
18:15 清理 清理测试数据

任务2:修正触发时间 ✅

时间线

17:27  暂停alert_channel_health cron
17:27-18:00  等待33分钟(心跳超时阈值30分钟)
18:00  dead_mans_switch触发(整点调度)
18:02  验证告警已写入
18:05  恢复alert_channel_health cron

关键: dead_mans_switch是整点运行(0 * * * *),所以18:00触发。


任务3:21:00任务冲突确认 ✅

21:00运行的任务

任务 cron_id 脚本 冲突风险
共振桥接器每日流水线 725902f0 resonance_pipeline.py ⚠️ 需确认
选股台账静默检查 6b235078 hb_alpha_ledger_watch.py ⚠️ 需确认
📊 每周周报 weekly_s hb_weekly_summary.py ✅ 无冲突
月线主进月度回测 9dce3919 monthly_mainin_backtest.py ✅ 无冲突

建议

推迟受控测试到21:45后,避开21:00任务

任务4:D2最终时间表 ✅

时段 任务 内容
17:25-18:20 Dead-Man测试 暂停→等待→验证→恢复
21:45-22:30 受控测试前3项 告警路径、超时路径、通道健康
22:30-23:00 影子cron集成 B3临时替换
23:00-23:30 回归验证 清理+确认

待确认问题

□ 1. dead_mans_switch的完整cron_id(16位)?
□ 2. 共振桥接器和选股台账是否读写alert_state.db?
□ 3. 受控测试是否推迟到21:45后?

⏳ 等待用户确认...

请确认以上方案,回复"进入D2"启动明天执行。