每日备份 2026-06-10 12:57:13

This commit is contained in:
root-backup committed 2026-06-10 12:57:14 +08:00
1 parent fda2ccb8c2
commit 3d2e638c6a
244 files changed
+58890 -3

No files matched your search

+242
View File
@@ -0,0 +1,242 @@
#!/bin/bash
echo "=== OpenClaw增强修复 ==="
echo "修复时间: $(date)"
echo ""
# 1. 备份当前状态
echo "1. 📊 备份当前状态..."
CONFIG_FILE="/root/.openclaw/openclaw.json"
BACKUP_DIR="/root/.openclaw/backup"
mkdir -p "$BACKUP_DIR"
# 备份配置文件
if [ -f "$CONFIG_FILE" ]; then
BACKUP_FILE="${BACKUP_DIR}/openclaw.json.backup_$(date +%Y%m%d_%H%M%S)"
cp "$CONFIG_FILE" "$BACKUP_FILE"
echo " 配置文件备份到: $BACKUP_FILE"
fi
# 备份进程信息
echo " 当前进程:"
ps aux | grep -E "(openclaw|claw)" | grep -v grep || echo " 无相关进程"
# 2. 清理无效配置字段
echo ""
echo "2. 🧹 清理无效配置字段..."
if [ -f "$CONFIG_FILE" ]; then
echo " 运行配置修复..."
openclaw doctor --fix 2>&1 | grep -v "autoSelectFamily" | head -20
# 如果doctor失败,手动清理
if openclaw config validate 2>&1 | grep -q "invalid"; then
echo " 手动清理无效字段..."
python3 << 'PYEOF'
import json
import os
import sys
config_file = '/root/.openclaw/openclaw.json'
if not os.path.exists(config_file):
print("配置文件不存在")
sys.exit(0)
with open(config_file, 'r') as f:
config = json.load(f)
# 清理已知无效字段
invalid_fields = []
def clean_invalid(obj, path=''):
if isinstance(obj, dict):
keys_to_remove = []
for key in list(obj.keys()):
current_path = f'{path}.{key}' if path else key
# 检查Telegram相关无效字段
if 'telegram' in str(key).lower():
if 'capabilities' in str(key).lower():
if isinstance(obj[key], dict):
# 只保留有效的capabilities
valid_caps = {}
if 'inlineButtons' in obj[key]:
valid_caps['inlineButtons'] = obj[key]['inlineButtons']
obj[key] = valid_caps
elif 'defaultTarget' in str(key).lower():
# 记录但暂时保留
invalid_fields.append(current_path)
elif 'polling' in str(key).lower():
invalid_fields.append(current_path)
# 递归清理
if isinstance(obj[key], (dict, list)):
clean_invalid(obj[key], current_path)
# 移除明确无效的字段
for key in ['defaultTarget', 'polling']:
if key in obj:
del obj[key]
invalid_fields.append(f'{path}.{key}' if path else key)
elif isinstance(obj, list):
for i, item in enumerate(obj):
clean_invalid(item, f'{path}[{i}]')
clean_invalid(config)
if invalid_fields:
print(f" 清理了 {len(invalid_fields)} 个无效字段:")
for field in invalid_fields[:10]: # 只显示前10个
print(f" - {field}")
# 确保有基本的Telegram配置
if 'channels' not in config:
config['channels'] = {}
if 'telegram' not in config['channels']:
config['channels']['telegram'] = {
'enabled': True,
'token': '8529719199:AAGjLDflvMXAEdgrBTSBEczOoSMybLU4gcs'
}
elif 'enabled' not in config['channels']['telegram']:
config['channels']['telegram']['enabled'] = True
# 保存清理后的配置
with open(config_file, 'w') as f:
json.dump(config, f, indent=2, ensure_ascii=False)
print("✅ 配置清理完成")
PYEOF
fi
fi
# 3. 停止所有相关进程
echo ""
echo "3. 🛑 停止所有OpenClaw进程..."
pkill -f "openclaw" 2>/dev/null
sleep 2
# 确保进程停止
if pgrep -f "openclaw" > /dev/null; then
echo " 强制停止剩余进程..."
pkill -9 -f "openclaw" 2>/dev/null
sleep 1
fi
# 4. 清理锁文件和临时文件
echo ""
echo "4. 🗑️ 清理临时文件..."
find /root/.openclaw -name "*.lock" -delete 2>/dev/null
find /tmp -name "*openclaw*" -type f -delete 2>/dev/null 2>/dev/null
LOCK_COUNT=$(find /root/.openclaw -name "*.lock" 2>/dev/null | wc -l)
echo " 剩余锁文件: $LOCK_COUNT"
# 5. 启动网关
echo ""
echo "5. 🚀 启动网关..."
LOG_FILE="/tmp/openclaw_restart_$(date +%Y%m%d_%H%M%S).log"
echo " 日志文件: $LOG_FILE"
# 启动网关并记录日志
openclaw gateway --force --port 18789 > "$LOG_FILE" 2>&1 &
GATEWAY_PID=$!
echo " 网关PID: $GATEWAY_PID"
# 6. 等待启动
echo ""
echo "6. ⏳ 等待网关启动..."
START_SUCCESS=false
for i in {1..20}; do
# 检查进程是否存在
if ! ps -p "$GATEWAY_PID" > /dev/null 2>&1; then
echo " ❌ 第${i}秒: 网关进程已退出"
echo " 查看日志:"
tail -20 "$LOG_FILE"
break
fi
# 检查端口监听
if netstat -tlnp 2>/dev/null | grep -q ":18789 "; then
# 检查Web服务
if curl -s http://localhost:18789/ > /dev/null 2>&1; then
echo " ✅ 第${i}秒: 网关启动成功"
START_SUCCESS=true
break
fi
fi
if [ $i -le 10 ]; then
echo " ⏳ 第${i}秒: 启动中..."
fi
sleep 1
done
# 7. 验证修复
echo ""
echo "7. ✅ 验证修复..."
if [ "$START_SUCCESS" = true ]; then
echo " a) 检查网关状态:"
echo " 进程: $(ps -p $GATEWAY_PID -o pid,cmd --no-headers 2>/dev/null || echo '无')"
echo " 端口: $(netstat -tlnp 2>/dev/null | grep 18789 | wc -l)个监听"
echo ""
echo " b) 测试基本功能:"
# 测试Web访问
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:18789/ 2>/dev/null || echo "无法连接")
echo " Web服务: HTTP $HTTP_STATUS"
echo ""
echo " c) 测试Telegram发送:"
echo " 测试发送消息到Telegram..."
TELEGRAM_TEST=$(timeout 15 openclaw message send --channel telegram --target "5117446326" --message "修复测试 $(date '+%H:%M:%S')" 2>&1 | tail -5)
if echo "$TELEGRAM_TEST" | grep -q "✅\|Sent"; then
echo " ✅ Telegram测试成功"
else
echo " ℹ️ Telegram测试结果:"
echo "$TELEGRAM_TEST" | sed 's/^/ /'
fi
echo ""
echo " d) 系统状态:"
openclaw channels status 2>&1 | grep -A 5 -B 2 "Telegram" || echo " Telegram状态检查失败"
else
echo " ❌ 网关启动失败"
echo " 最后20行日志:"
tail -20 "$LOG_FILE"
# 尝试备用启动方式
echo ""
echo " 尝试备用启动方式..."
openclaw gateway stop 2>/dev/null || true
sleep 2
nohup openclaw gateway --port 18789 > /tmp/openclaw_fallback.log 2>&1 &
sleep 5
if curl -s http://localhost:18789/ > /dev/null 2>&1; then
echo " ✅ 备用启动方式成功"
else
echo " ❌ 所有启动方式都失败"
fi
fi
# 8. 生成修复报告
echo ""
echo "8. 📋 修复报告:"
echo "========================================"
echo "修复时间: $(date)"
echo "配置文件: $CONFIG_FILE"
echo "网关状态: $([ "$START_SUCCESS" = true ] && echo "✅ 运行中" || echo "❌ 失败")"
echo "Telegram: $(openclaw channels status 2>&1 | grep -q "Telegram.*enabled" && echo "✅ 已启用" || echo "❌ 未启用")"
echo "锁文件数: $LOCK_COUNT"
echo "========================================"
echo ""
echo "🔧 后续操作建议:"
echo " 1. 发送消息: openclaw message send --channel telegram --target 5117446326 --message '内容'"
echo " 2. 查看状态: openclaw channels status"
echo " 3. 查看日志: tail -f $LOG_FILE"
echo " 4. 如果还有问题,查看备份配置: $BACKUP_FILE"
echo ""
echo "🎉 修复完成!"