D2启动前最后确认(最终版)
日期: 2026-09-14
状态: 等待用户最终确认
任务1:测试告警分辨方式 ✅
方案A:时间戳记录法(推荐)
# 测试前记录当前时间
test_start_time = datetime.now().isoformat()
print(f"[TEST] 测试开始时间: {test_start_time}")
# 测试后核对告警时间戳
# SELECT * FROM alerts WHERE created_at > '{test_start_time}'
优点:
- 不修改任何代码
- 测试前后数据可对比
- 清理简单(按时间范围DELETE)
缺点:
- 需要手动核对
- 如果测试失败可能错过告警
方案B:临时修改TG目标(需改代码)
# alert_utils.py L52-56:
TG_CHAT_ID = (
os.environ.get("TELEGRAM_HOME_CHANNEL")
or _hermes_env.get("TELEGRAM_HOME_CHANNEL", "")
or os.environ.get("TG_CHAT_ID", "8673372605") # ← 默认值
)
# 临时测试chat_id(需改代码或设环境变量)
os.environ["TG_CHAT_ID"] = "测试chat_id"
优点:
- 告警发送到测试chat,不影响主chat
- 清晰区分测试/生产告警
缺点:
- 需修改代码或设环境变量
- 可能遗漏清理
推荐方案:时间戳记录法
执行步骤:
1. 测试前打印时间戳: [TEST] 开始时间: 2026-09-15T15:30:00
2. 执行测试操作
3. 检查alerts表: SELECT * FROM alerts WHERE created_at > '2026-09-15T15:30:00'
4. 核对告警内容、时间戳
5. 截图保存测试告警
6. 清理测试数据
任务2:影子cron集成方式最终确认 ✅
B3方式确认
流程:
1. 备份原cron状态 → jobs.json.bak_test_20260915
2. 临时禁用原cron → hermes cron pause <任务id>
3. 注册影子cron → hermes cron create ...
4. 手动触发影子cron → hermes cron run <影子id>
5. 验证告警功能 → 检查alerts表
6. 恢复原cron → hermes cron resume <任务id>
7. 删除影子cron → hermes cron remove <影子id>
8. 清理测试数据 → DELETE FROM ...
测试对象选择
推荐: ops_system_health (P1任务)
- cron_id: 1f99cf7364a9
- 调度: 30 2 * * *(凌晨2:30,非高峰)
- 当前状态: 无task_runs记录(安全)
- 风险: 低(P1级别,连续2次才告警)
备选: risk_sentiment_radar (P1任务)
- cron_id: b770750250c8
- 调度: 40 8 * * 1-5(08:40,与盘前任务冲突)
- 不推荐
任务3:15:30-16:30盘后任务确认 ⚠️
该时段运行任务(15个)
| 时间 | 任务 | 频率 | 风险 |
|---|---|---|---|
| 15:30 | 月线主进盘后快照 | 周一 | ⚠️ |
| 15:36 | 盘后快照填充 | 工作日 | ⚠️ |
| 15:40 | 月线主进盘后追踪 | 工作日 | ⚠️ |
| 15:45 | β组双轨积累 | 工作日 | ⚠️ |
| 15:45 | 两融缓存盘后刷新 | 工作日 | ⚠️ |
| 16:00 | 重点监控池每日PIAS评估 | 每日 | ⚠️ agent-mode |
| 16:00 | 均普智能持仓跟踪 | 工作日 | ⚠️ P0任务 |
| 16:05 | 盘后收盘简报 | 工作日 | ⚠️ |
| 16:15 | F2日线分层扫描 | 工作日 | ⚠️ |
| 16:30 | FactorMiner因子挖掘 | 工作日 | ⚠️ |
冲突分析
⚠️ 15:30-16:30也是繁忙时段!
- 15个任务在此时段运行
- 16:00有2个agent-mode任务(PIAS评估+持仓跟踪)
- 资源竞争较严重
✅ 安全测试窗口:
- 15:30前:准备阶段
- 16:30后:测试后验证
- 建议:16:30-17:00进行受控测试
调整后时间表
| 时段 | 任务 | 内容 |
|---|---|---|
| 16:30-17:00 | 受控测试 | 4项测试 |
| 20:00-20:30 | 影子cron集成 | B3临时替换 |
| 21:00-21:30 | 回归验证 | 清理+确认 |
任务4:回滚方案轻量化 ⚠️
hermes cron reload 检查
❌ reload命令不存在
hermes cron子命令: list,create,add,edit,pause,resume,run,remove,rm,delete,status,runs,history,incidents,notepad,doctor,tick
✅ 替代方案:
方案1: hermes cron pause + hermes cron resume(推荐)
方案2: cp jobs.json.bak jobs.json + hermes gateway restart
回滚命令(轻量化)
# 方案1: 暂停/恢复(推荐,无需重启)
hermes cron pause <影子cron_id> # 暂停影子
hermes cron resume <原cron_id> # 恢复原任务
# 方案2: 备份恢复(如需)
cp C:/Users/Admin/AppData/Local/hermes/cron/jobs.json.bak_20260913 \
C:/Users/Admin/AppData/Local/hermes/cron/jobs.json
hermes gateway restart # 重新加载配置
# 方案3: DB清理
python -c "
import sqlite3
conn = sqlite3.connect('D:/Hermes/data/state/alert_state.db')
conn.execute(\"DELETE FROM task_runs WHERE start_time >= '2026-09-15T16:00:00'\")
conn.execute(\"DELETE FROM alerts WHERE created_at >= '2026-09-15T16:00:00'\")
conn.execute(\"DELETE FROM silence_state WHERE task_id = 'ops_system_health'\")
conn.commit()
conn.close()
print('DB清理完成')
"
D2最终时间表(调整后)
明天(9月15日)
| 时间 | 任务 | 内容 | 状态 |
|---|---|---|---|
| 16:30-17:00 | 受控测试 | 4项测试(告警路径+超时路径+Dead-Man+通道健康) | ⏳ 待执行 |
| 20:00-20:30 | 影子cron集成 | B3临时替换(ops_system_health) | ⏳ 待执行 |
| 21:00-21:30 | 回归验证 | 恢复原cron+清理数据+确认无异常 | ⏳ 待执行 |
最终确认清单
□ D1总结已输出并确认(90次运行,100%成功)
□ D2方案已输出并确认
□ 测试告警分辨方式已确认(时间戳记录法)
□ 清理清单已确认
□ 盘后任务冲突已分析(15个任务)
□ 回滚方案已准备(pause/resume替代gateway restart)
□ 备份文件已确认存在(jobs.json.bak_20260913)
□ D2时间表已调整(16:30-17:00/20:00-20:30/21:00-21:30)
⚠️ 关键调整:
- 受控测试从08:30改到16:30(避开盘前高峰)
- 回滚用pause/resume替代gateway restart(轻量级)
- 测试告警用时间戳分辨(不改代码)
⏳ 等待用户确认...
请确认调整后方案,回复"进入D2"启动明天执行。