步骤4阶段1 D2验证方案

源文件:D:\Hermes\reports\步骤4阶段1_D2验证方案.md · 日期 2026-09-13 · 4KB

步骤4阶段1 D2验证方案

日期: 2026-09-14(预计)
观察任务: cron_id=7e8ae2aeca81
调度: */15 * * * *


任务1:后台进程处理

【当前状态】
  - proc_bc7edd368550 进程需手动终止
  - 改用手动检查方式,不再依赖后台sleep进程

【终止命令】
  taskkill //F //PID <进程ID>

【建议】
  - 到14:02手动执行检查命令
  - 无需等待后台进程自然结束

任务2:修正查询命令

import json
from pathlib import Path

jobs_path = Path(r"C:/Users/Admin/AppData/Local/hermes/cron/jobs.json")
data = json.loads(jobs_path.read_text(encoding='utf-8'))

# 脚本定义的真实映射
TASK_CRON_IDS = {
    "position_688306": "8e924898712b",
    "ops_system_health": "1f99cf7364a9",
    "ops_backup_daily": "f02d9606f39e",
    "risk_sentiment_radar": "b770750250c8",
    "eval_pias_daily": "92c54fdd380e",
}

print(f"{'显示名':<18s} | {'脚本task_id':<16s} | {'jobs.json ID':<18s} | {'last_status':<11s} | last_run_at")
print("-" * 95)
for display, job_id in TASK_CRON_IDS.items():
    for task in data.get("jobs", []):
        if task.get("id") == job_id:
            print(f"{display:<18s} | {job_id:<16s} | {job_id:<18s} | {str(task.get('last_status', '?')):<11s} | {task.get('last_run_at', '?')}")
            break

修正点:第二个字段输出 job_id(脚本task_id),不再是 display


任务3:告警路径测试方案(方案D)✅

推荐方案:临时添加测试任务

方案 操作 优点 缺点
A:test_前缀任务 插入test_记录 隔离安全 ❌ 不在jobs.json → unknown → 不告警
B:jobs.json添加 修改jobs.json 可触发告警 ⚠️ 需恢复
C:真实任务ID 使用position_688306 可触发告警 ⚠️ 有真实任务影响风险
D:测试任务+test_前缀 ✅ 临时添加测试任务 可隔离+可清理 需恢复jobs.json

测试步骤(方案D)

# 1. 备份 jobs.json
copy C:/Users/Admin/AppData/Local/hermes/cron/jobs.json C:/Users/Admin/AppData/Local/hermes/cron/jobs.json.bak_测试

# 2. 添加测试任务到 jobs.json
# 编辑 jobs.json,在 jobs 数组中添加:
{
  "id": "test_alert_path_001",
  "name": "[TEST] 告警路径测试",
  "schedule": "*/15 * * * *",
  "command": "python -c \"import time; time.sleep(1)\"",
  "last_status": "failed",
  "last_run_at": "2026-09-13T13:30:00+08:00"
}

# 3. 在 task_runs 表插入测试记录
python -c "
import sqlite3
conn = sqlite3.connect('D:/Hermes/data/state/alert_state.db')
conn.execute(\"\"\"INSERT OR REPLACE INTO task_runs 
    (task_id, status, start_time, exit_code, error_message)
    VALUES ('test_alert_path_001', 'failed', '2026-09-13T13:30:00', 1, 'test alert trigger')\"\"\")
conn.commit()
conn.close()
print('测试记录已插入')
"

# 4. 等待cron运行(约15分钟)
#    下次运行: 12:45 或 13:00
#    观察是否收到 [TEST] 前缀的 TG 告警

# 5. 验证结果
#    - 收到告警 → 告警路径正常 ✅
#    - 未收到告警 → 检查静默期/通道配置

# 6. 清理测试数据
#    恢复 jobs.json:
copy C:/Users/Admin/AppData/Local/hermes/cron/jobs.json.bak_测试 C:/Users/Admin/AppData/Local/hermes/cron/jobs.json

#    删除 task_runs 测试记录:
python -c "
import sqlite3
conn = sqlite3.connect('D:/Hermes/data/state/alert_state.db')
conn.execute(\"DELETE FROM task_runs WHERE task_id = 'test_alert_path_001'\")
conn.commit()
conn.close()
print('测试记录已清理')
"

评估结论

✅ 告警路径需通过受控测试验证
✅ 建议使用方案D(测试任务+test_前缀)
✅ 执行时机:D5后,进阶段2前
⚠️ 测试后必须恢复 jobs.json 并清理 task_runs

D2 执行计划

时间 任务 输出
D2 10:00 执行对比脚本 对比报告
D2 14:00 再次验证 确认稳定
D2 20:00 晚间验证 确认稳定
D2 22:00 D2总结 阶段1→2条件检查

报告更新时间: 2026-09-13T12:42:00