#!/bin/bash echo "=== OpenClaw 加强修复 (2026-02-26 版) ===" # 0. 先杀干净所有可能残留(最重要,避免鬼进程) echo "强制杀死所有 OpenClaw / node 相关进程..." pkill -9 -f "openclaw|clawdbot|gateway|molt" 2>/dev/null pkill -9 -f node 2>/dev/null # 如果你确定没其他 node 程序在跑才安全,否则注释掉这行 sleep 2 # 检查端口是否真释放 echo "检查 18789 端口占用:" sudo lsof -i :18789 || sudo netstat -tuln | grep 18789 || echo "端口已释放" # 1. 运行 doctor --fix(官方推荐修复工具) echo "运行 openclaw doctor --fix ..." openclaw doctor --fix || openclaw doctor --repair --force # 2. 清理更多可能导致崩溃的东西 echo "清理锁、旧 session、缓存..." find ~/.openclaw -name "*.lock" -delete 2>/dev/null rm -rf ~/.openclaw/sessions/* 2>/dev/null # 如果你不怕丢对话历史 openclaw system clean --cache 2>/dev/null || true # 3. 以后台 + verbose + force 方式启动(方便看崩溃原因) echo "启动 gateway(前台 verbose + force)..." openclaw gateway stop 2>/dev/null || true sleep 2 openclaw gateway --force --verbose --port 18789 > /tmp/gateway_crash.log 2>&1 & # 4. 等待并监控(延长到 30 秒,看是否秒崩) echo "等待 gateway 稳定启动(最多 30 秒)..." for i in {1..30}; do if curl -s --connect-timeout 2 http://127.0.0.1:18789/ > /dev/null; then echo "✅ 端口已监听(第 ${i} 秒)" # 再等 8 秒看会不会掉 sleep 8 if curl -s http://127.0.0.1:18789/ > /dev/null; then echo "✅ 稳定!(没在 8 秒内崩溃)" break else echo "❌ 端口又消失了 → 崩溃了" fi fi sleep 1 done # 5. 如果起来了,测试 if curl -s http://127.0.0.1:18789/ > /dev/null; then echo "测试 agent 对话..." openclaw agent --to "fix_test_$(date +%s)" --message "测试:你现在状态正常吗?请回复 '爪子已复活,汪!'" --local --timeout 25 else echo "❌ Gateway 没起来,看日志:" echo "tail -n 80 /tmp/gateway_crash.log" echo "请把上面日志贴给我,我帮你看具体崩溃原因。" fi echo "修复结束。如果还是不行,请提供:" echo "1. /tmp/gateway_crash.log 的最后 30 行" echo "2. openclaw status --all 的输出" echo "3. journalctl --user -u openclaw-gateway -n 50 (如果用了 systemd)"