Files
知微 80d59c9331 feat: 统一部署目录——所有运行时文件归入MoFin repo
- deploy/bot/ — XMPP bot核心(xmpp_agent_core + xmpp_zhiwei_bot)
- deploy/profile-scripts/ — cron脚本(price_monitor等)
- 运行时文件已替换为指向MoFin的符号链接
- 改代码只需改MoFin,系统自动生效
2026-07-17 23:12:35 +08:00

57 lines
2.0 KiB
Python

#!/usr/bin/env python3
"""gateway_health.py — 知微网关/XMPP Bot 自愈脚本"""
import subprocess, sys, time, os, json, urllib.request, socket
GATEWAY_URL = "http://127.0.0.1:8643/health"
BOT_PORT = 5805
BOT_SCRIPT = "/home/hmo/xmpp_zhiwei_bot.py"
def check_port(port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(3)
try:
r = s.connect_ex(('127.0.0.1', port))
return r == 0
finally:
s.close()
def fix(what):
if what == "gateway":
r = subprocess.run(["python3", "-m", "hermes_cli.main", "-p", "position-analyst", "gateway", "run", "--replace"],
cwd="/home/hmo/hermes-agent", timeout=60, capture_output=True, text=True)
time.sleep(5)
return check_port(8643) and r.returncode == 0
elif what == "xmpp_bot":
# Kill existing if any
subprocess.run(["pkill", "-f", "xmpp_zhiwei_bot.py"], timeout=5)
time.sleep(2)
subprocess.run(["python3", BOT_SCRIPT], timeout=30)
time.sleep(5)
return check_port(BOT_PORT)
return False
if __name__ == "__main__":
target = sys.argv[1] if len(sys.argv) > 1 else "all"
ok = True
if target in ("all", "gateway"):
if not check_port(8643):
print("[HEALTH] gateway 8643 CLOSED → 修复中")
if fix("gateway"):
print("[HEALTH] gateway 修复成功")
else:
print("[HEALTH] ❌ gateway 修复失败", file=sys.stderr)
ok = False
else:
print("[HEALTH] gateway 8643 正常")
if target in ("all", "xmpp_bot"):
if not check_port(BOT_PORT):
print(f"[HEALTH] xmpp_bot {BOT_PORT} CLOSED → 修复中")
if fix("xmpp_bot"):
print("[HEALTH] xmpp_bot 修复成功")
else:
print("[HEALTH] ❌ xmpp_bot 修复失败", file=sys.stderr)
ok = False
else:
print(f"[HEALTH] xmpp_bot {BOT_PORT} 正常")
sys.exit(0 if ok else 1)