From 73098176c066a41360883c2b152cfaecc893a6e7 Mon Sep 17 00:00:00 2001 From: hmo Date: Tue, 14 Jul 2026 03:13:53 +0800 Subject: [PATCH] =?UTF-8?q?R02=E4=BF=AE=E5=A4=8D:=20=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E6=A3=80=E6=B5=8B60s=C3=973=E2=86=92exit=E2=86=92systemd?= =?UTF-8?q?=E9=87=8D=E5=90=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/PRD.md | 2 +- xmpp_agent_core.py | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/PRD.md b/docs/PRD.md index a726e96..f72d6b3 100644 --- a/docs/PRD.md +++ b/docs/PRD.md @@ -90,7 +90,7 @@ | 编号 | 问题 | 影响 | 当前措施 | 优先级 | 当前状态 | |------|------|------|----------|--------|----------| | R01 | Gateway 进程意外退出未自动拉起 | 服务中断 | 无自动恢复 | P0 | 🔄 Gateway 健康已纳入监控(I/J Tab显示), 自动拉起待 systemd 配置 | -| R02 | XMPP Bot 断线后重连失败 | 消息丢失 | slixmpp reconnect 不可靠 | P0 | ✅ frp heartbeat已加 | +| R02 | XMPP Bot 断线后重连失败 | 消息丢失 | slixmpp reconnect 不可靠 | P0 | ✅ frp heartbeat + 应用层保活(60s检测×3→exit→systemd重启) | | R03 | Provider key 过期/配额超限无告警 | LLM 调用失败 | fallback 不总能触发 | P0 | 🔄 fallback链待验证 | | R04 | Session 膨胀导致响应退化 | 回复质量下降 | 硬截断 200 条 | P1 | ✅ 硬截断200条已实现 | | R05 | SOUL vs MEMORY 规则冲突 | 行为异常 | 需手动清理 memory | P1 | 🔄 需持续维护 | diff --git a/xmpp_agent_core.py b/xmpp_agent_core.py index cafef66..3a836d0 100644 --- a/xmpp_agent_core.py +++ b/xmpp_agent_core.py @@ -1165,9 +1165,20 @@ def main(): loop = asyncio.get_event_loop() async def _status_check(): + skipped = 0 while True: await asyncio.sleep(60) - log("(alive)") + alive = bot and bot.is_connected() if hasattr(bot, 'is_connected') else False + if not alive: + skipped += 1 + log(f"[R02] XMPP 连接已断开 ({skipped}/3),等待重连...") + if skipped >= 3: + log("[R02] 连续 3 次检测到连接断开,退出进程让 systemd 重启") + os._exit(1) + else: + if skipped > 0: + log(f"(连接已恢复,跳过 {skipped} 次检测)") + skipped = 0 asyncio.ensure_future(_status_check())