128 lines
5.5 KiB
Markdown
128 lines
5.5 KiB
Markdown
# 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)
|
||
|
||
### 停用 1:cron_to_xmpp(crontab 版)
|
||
```bash
|
||
# 原命令(已在 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 版先消费)
|
||
|
||
### 停用 2:session_to_cron_bridge(crontab 版)
|
||
```bash
|
||
# 原命令(已在 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_xmpp`(53 行,含注释)|
|
||
| **脚本本体** | `/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.json`(id=f948702cf5de)|
|
||
| **推送日志** | `/home/hmo/.cron_to_xmpp.log` / `/home/hmo/.session_bridge.log` |
|
||
| **去重 journal** | `~/.hermes/cron/.relay_journal.json`(两版共享,勿删)|
|
||
|
||
---
|
||
|
||
## 四、如何恢复
|
||
|
||
### 场景 A:hermes 版挂了,需要 crontab 版兜底
|
||
|
||
```bash
|
||
# 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:顶层(mohe)cron 恢复,需要 session_to_cron_bridge
|
||
|
||
```bash
|
||
# 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:完全回滚(两条都恢复)
|
||
|
||
```bash
|
||
# 直接用备份覆盖 crontab(恢复全部条目)
|
||
crontab /home/hmo/.backups/crontab.bak_20260811_cron_to_xmpp
|
||
crontab -l | grep -E 'cron_to_xmpp|session_to_cron' # 应显示两条 */2 原命令
|
||
```
|
||
|
||
---
|
||
|
||
## 五、验证清单(停用后确认推送正常)
|
||
|
||
```bash
|
||
# 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.py` 和 `session_to_cron_bridge.py` 本体保留(hermes 版仍用前者)
|
||
4. **hermes 版 job 勿动**:`cron报告推XMPP-每5分`(id=f948702cf5de)是当前唯一活跃入口
|
||
5. **若发现漏推**:先查 journal 是否正常、再查 hermes 版 job 状态,最后才考虑恢复 crontab 版
|