D2执行前最后修正(最终确认版 v3)
日期: 2026-09-14
状态: 等待用户最终确认
关键发现:Dead-Man测试机制澄清 ⚠️
alert_channel_health.py的行为
# 从代码分析(409行):
# 1. 监控5个任务的状态(position_688306等)
# 2. 写入自己的心跳到channel_health表
# 3. 检查任务超时/失败
# 4. 发送TG告警
# 5. 但是没有Dead-Man自检测逻辑!
关键代码(第368-369行):
# 写入心跳记录(供dead_mans_switch检查)
_write_heartbeat("alert_channel_health", "ok" if alert_count == 0 else "warning", alert_count)
dead_mans_switch是什么?
从代码注释看,alert_channel_health写入心跳是"供dead_mans_switch检查"
但搜索未找到dead_mans_switch.py脚本
可能情况:
1. dead_mans_switch是heartbeat_watchdog的功能之一
2. dead_mans_switch是另一个名称
3. dead_mans_switch尚未实现
任务1:修正Dead-Man测试方案 ⚠️
问题
原假设: alert_channel_health会检查自己的channel_health表
实际: alert_channel_health不检查自己的心跳,只检查其他5个任务
结论: 暂停alert_channel_health的cron不会触发Dead-Man告警
修正方案
方案A:验证heartbeat_watchdog是否检查channel_health表
步骤:
1. 读取heartbeat_watchdog.py的TASKS_FILE
2. 确认是否包含alert_channel_health
3. 如果不包含,Dead-Man测试需调整
方案B:直接测试alert_channel_health的告警功能
步骤:
1. 修改channel_health表的last_check_time为2小时前
2. 手动触发alert_channel_health
3. 验证是否触发告警(如果它有Dead-Man检测逻辑)
注意: 从代码看,alert_channel_health没有Dead-Man检测逻辑
这个方案可能无效
方案C:重新定义Dead-Man测试目标
目标: 验证alert_channel_health的告警功能
测试:
1. 手动修改ops_system_health的last_run_at为3小时前
2. 触发alert_channel_health运行
3. 验证是否写入alerts表并发送TG告警
任务2:修正触发时间 ✅
时间线(方案C)
17:25 准备测试
17:26 备份状态
17:27 手动修改ops_system_health的last_run_at
UPDATE task_runs SET start_time = datetime('now', '-3 hours')
WHERE task_id = 'ops_system_health'
ORDER BY start_time DESC LIMIT 1
17:28 手动触发alert_channel_health
hermes cron run 7e8ae2aeca81
17:30 验证告警
SELECT * FROM alerts WHERE task_id='ops_system_health'
17:32 恢复数据
UPDATE task_runs SET start_time = ...(恢复原值)
17:35 清理测试数据
17:40 打印总结
任务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-17:45 | Dead-Man测试 | 修改last_run_at→触发告警→验证→恢复 |
| 21:45-22:30 | 受控测试前3项 | 告警路径、超时路径、通道健康 |
| 22:30-23:00 | 影子cron集成 | B3临时替换 |
| 23:00-23:30 | 回归验证 | 清理+确认 |
待确认问题
□ 1. Dead-Man测试用方案C(测试alert_channel_health的告警功能)?
□ 2. 共振桥接器和选股台账是否读写alert_state.db?
□ 3. 受控测试是否推迟到21:45后?
⏳ 等待用户确认...
请确认以上方案,回复"进入D2"启动明天执行。