步骤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