Files
MoFin/docs/cron-to-xmpp-restore-20260811.md
T

5.5 KiB
Raw Blame History

cron_to_xmpp 双通道清理 — 恢复说明

创建:2026-08-11 | 操作人:小小莫 | 决策人:老莫 状态: 已执行(系统 crontab 版已停,hermes jobs 版保留) 对应审计项:system-audit-20260810.md §十「cron_to_xmpp 双通道」


一、背景:什么是双通道

cron_to_xmpp.py(智能 cron 报告推送)被两个独立的调度系统同时调度:

调度系统 调度配置 状态
系统 crontab */2 * * * *(每 2 分钟,全天) 🛑 2026-08-11 已停
hermes jobs.json */5 9-16 * * 1-5(每 5 分钟,交易日盘中) 保留(正常)

两处调用的是同一份脚本文件(硬链接,md5 相同),非两个版本。

脚本职责

扫描 cron 输出目录 → 找到 LLM 生成的报告(有实质内容)→ 推送到 XMPP(老爸微信)。 规则:跳过纯脚本输出、跳过 [SILENT]、正文 <20 字不推、journal 去重(防重复推送)。


二、停用了什么(2026-08-11

停用 1cron_to_xmppcrontab 版)

# 原命令(已在 crontab 中注释保留)
*/2 * * * * cd /home/hmo/MoFin/deploy/profile-scripts && python3 cron_to_xmpp.py >> /home/hmo/.cron_to_xmpp.log 2>&1

停用理由hermes jobs.json 版(cron报告推XMPP-每5分id=f948702cf5de)功能完整:

  • 同一脚本(md5 一致)
  • 有 journal 去重(不会重复推送)
  • 有状态追踪(last_status/last_run_at
  • 交易日限定(9-16 点,周末不跑)
  • crontab 版每次空转(日志"推送0份"——报告已被 hermes 版先消费)

停用 2session_to_cron_bridgecrontab 版)

# 原命令(已在 crontab 中注释保留)
*/2 * * * * cd /home/hmo/web-dashboard && python3 session_to_cron_bridge.py >> /home/hmo/.session_bridge.log 2>&1

停用理由:它服务的目录 .hermes/cron/output/(顶层 mohe 旧 cron 输出)已停摆(顶层 jobs.json 7/23 后无更新,38991 个历史文件,8/1 后无新写入)。日志持续"写入0份新报告"——空转。 当前活跃通道~/.hermes/profiles/position-analyst/cron/output/hermes jobs 直写,不经 bridge)。

⚠️ 重要session_to_cron_bridge 没有 hermes jobs 替代,它是纯 crontab 依赖。 若未来恢复顶层(mohe)cron 调度,需同步恢复此 bridge。


三、备份位置(恢复依据)

备份 位置
完整 crontab 备份 /home/hmo/.backups/crontab.bak_20260811_cron_to_xmpp53 行,含注释)
脚本本体 /home/hmo/MoFin/deploy/profile-scripts/cron_to_xmpp.py= hermes scripts 硬链接)
bridge 本体 /home/hmo/MoFin/deploy/profile-scripts/session_to_cron_bridge.py= web-dashboard 硬链接)
hermes 版 job 配置 ~/.hermes/profiles/position-analyst/cron/jobs.jsonid=f948702cf5de
推送日志 /home/hmo/.cron_to_xmpp.log / /home/hmo/.session_bridge.log
去重 journal ~/.hermes/cron/.relay_journal.json(两版共享,勿删)

四、如何恢复

场景 Ahermes 版挂了,需要 crontab 版兜底

# 1. 取消 crontab 中 cron_to_xmpp 那行的注释(去掉行首 #)
crontab -e
# 找到这行,删掉行首 "# [2026-08-11停] ..." 注释前缀,恢复为:
*/2 * * * * cd /home/hmo/MoFin/deploy/profile-scripts && python3 cron_to_xmpp.py >> /home/hmo/.cron_to_xmpp.log 2>&1

# 2. 验证生效
crontab -l | grep cron_to_xmpp
tail -5 /home/hmo/.cron_to_xmpp.log   # 应看到新的运行记录

场景 B:顶层(mohecron 恢复,需要 session_to_cron_bridge

# 1. 确认顶层 cron 是否真的恢复(有活跃 job)
ls -la /home/hmo/.hermes/cron/jobs.json   # mtime 应更新
# 2. 确认顶层 output 有新写入
find /home/hmo/.hermes/cron/output -type f -newermt '7 days ago' | head
# 3. 若以上确认恢复,则取消 bridge 注释:
crontab -e
*/2 * * * * cd /home/hmo/web-dashboard && python3 session_to_cron_bridge.py >> /home/hmo/.session_bridge.log 2>&1

场景 C:完全回滚(两条都恢复)

# 直接用备份覆盖 crontab(恢复全部条目)
crontab /home/hmo/.backups/crontab.bak_20260811_cron_to_xmpp
crontab -l | grep -E 'cron_to_xmpp|session_to_cron'   # 应显示两条 */2 原命令

五、验证清单(停用后确认推送正常)

# 1. hermes 版仍在跑
python3 -c "import json; d=json.load(open('/home/hmo/.hermes/profiles/position-analyst/cron/jobs.json')); jobs=d['jobs']; [print(j['name'], j.get('last_status')) for j in jobs if 'cron_to_xmpp' in str(j.get('script',''))]"
# → 应显示: cron报告推XMPP-每5分 ok

# 2. crontab 版已停(无活跃条目)
crontab -l | grep 'cron_to_xmpp.py >>' | grep -v '^#'   # → 应为空

# 3. 推送仍工作(等一次 hermes 版运行后查 journal
ls -la /home/hmo/.hermes/cron/.relay_journal.json   # mtime 持续更新

六、注意事项

  1. journal 是共享的.relay_journal.json 被两版共用,停 crontab 版不影响去重状态
  2. 日志文件保留.cron_to_xmpp.log 不再追加(停用),但历史记录保留
  3. 勿删脚本cron_to_xmpp.pysession_to_cron_bridge.py 本体保留(hermes 版仍用前者)
  4. hermes 版 job 勿动cron报告推XMPP-每5分id=f948702cf5de)是当前唯一活跃入口
  5. 若发现漏推:先查 journal 是否正常、再查 hermes 版 job 状态,最后才考虑恢复 crontab 版