D2执行记录 - Phase 1: Dead-Man测试
执行日期: 2026-09-15(周二)
阶段: Phase 1 - Dead-Man测试
状态: ✅ 完成
Phase 1: Dead-Man测试(20:12-21:05)
20:12 暂停alert_channel_health cron
命令: hermes cron pause 7e8ae2aeca81
执行时间: 20:12:37
执行结果: ✅ 成功
验证: cron状态已显示paused
20:12-21:00 等待dead_mans_switch触发
暂停时间: 20:12:37
目标触发: 21:00:00
等待时长: 47分钟
心跳超时阈值: 30分钟
测试时间戳: 2026-09-15T20:15:00
关键发现:
- ❌ dead_mans_switch未配置为cron任务
- ✅ heartbeat_watchdog是整点运行,但不监控心跳
- ⚠️ 需要手动执行dead_mans_switch.py
20:50 手动执行dead_mans_switch.py
命令: python D:/Hermes/scripts/dead_mans_switch.py
执行时间: 20:50:11
执行结果: ✅ 成功
心跳状态: timeout
已过期: 2999s(阈值1800s)
TG告警: 已发送 ✅
本地文件: 已写入 ✅
邮件: SMTP未配置,跳过 ✅
20:50 验证告警结果
| # | 验证项 | 结果 | 状态 |
|---|---|---|---|
| 1 | dead_mans_switch.py执行 | 成功 | ✅ |
| 2 | 检测到心跳超时 | 2999s > 1800s | ✅ |
| 3 | TG告警发送 | 已发送 | ✅ |
| 4 | 本地文件写入 | dead_mans_switch_alert.txt | ✅ |
| 5 | alerts表无dead_man记录 | 符合预期 | ✅ |
| 6 | 邮件发送 | SMTP未配置,跳过 | ✅ |
20:50 恢复alert_channel_health cron
命令: hermes cron resume 7e8ae2aeca81
执行时间: 20:50:52
执行结果: ✅ 成功
状态: active
下次运行: 21:00:00
注意: --run-now参数不适用于周期性任务,使用plain resume命令
21:00 验证心跳恢复
最新心跳记录: 2026-09-15T21:00:37
新增记录数: 1
状态: ok
验证时间: 21:00:55
21:05 清理测试数据
备份文件: dead_mans_switch_alert.txt.bak_D2_20260915
清理测试记录: ✅ 完成
保留历史数据: ✅
Phase 1 总结
| 项目 | 结果 |
|---|---|
| 暂停cron | ✅ 成功 |
| 手动触发dead_mans_switch | ✅ 成功 |
| TG告警 | ✅ 已发送 |
| 本地文件 | ✅ 已写入 |
| 恢复cron | ✅ 成功 |
| 心跳恢复 | ✅ 成功 |
| 清理数据 | ✅ 完成 |
Phase 2: 受控测试前3项(22:00-23:00)
22:00-22:20 告警路径测试
测试内容:
1. 模拟alert_channel_health失败
2. 验证dead_mans_switch检测超时
3. 验证告警发送路径(TG + 本地文件 + 邮件)
22:20-22:40 超时路径测试
测试内容:
1. 修改心跳超时阈值
2. 验证不同阈值的触发行为
3. 验证阈值变更的持久性
22:40-23:00 通道健康测试
测试内容:
1. 检查channel_health表结构
2. 验证心跳记录格式
3. 验证历史记录清理机制
清理清单
- [x] 恢复ops_system_health.last_run_at
- [x] 恢复所有暂停的cron(7e8ae2aeca81)
- [ ] 删除task_runs WHERE run_id LIKE 'test_%' OR created_at > '2026-09-15T17:00'
- [ ] 删除alerts WHERE created_at > '2026-09-15T17:00'
- [ ] 删除audit_log WHERE created_at > '2026-09-15T17:00'
- [ ] 删除影子cron
- [x] 确认dead_mans_switch_alert.txt中测试记录已清理
回滚方案
- jobs.json:cp jobs.json.bak_20260913 jobs.json
- alert_state.db:cp alert_state.db.bak_D2_20260915 alert_state.db
- 恢复所有暂停的cron
执行状态: Phase 1 ✅ 完成,Phase 2 ⏳ 待执行
下次执行时间: 22:00