Skip to content
广告 · 本站推荐广告

实用维护脚本

本页面提供了一系列现成的运维脚本,帮助你自动化日常的 OpenClaw 管理任务。

使用说明

以下脚本均为 Bash(Shell 脚本),适用于 Linux 和 macOS 环境。Windows 用户请在 WSL2 中运行。

数据备份脚本

定期备份 OpenClaw 数据,防止意外丢失:

bash
#!/bin/bash
# backup-openclaw.sh - OpenClaw 数据备份脚本
# 用法: bash backup-openclaw.sh [备份目录]

BACKUP_DIR="${1:-$HOME/openclaw-backups}"
OPENCLAW_HOME="${OPENCLAW_HOME:-$HOME/.openclaw}"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/openclaw-backup-$TIMESTAMP.tar.gz"

# 创建备份目录
mkdir -p "$BACKUP_DIR"

echo "📦 开始备份 OpenClaw 数据..."
echo "   源目录: $OPENCLAW_HOME"
echo "   备份到: $BACKUP_FILE"

# 执行备份(排除日志和临时文件)
tar -czf "$BACKUP_FILE" \
  --exclude='*.log' \
  --exclude='tmp/*' \
  --exclude='cache/*' \
  -C "$(dirname $OPENCLAW_HOME)" \
  "$(basename $OPENCLAW_HOME)"

# 保留最近 7 个备份,删除旧备份
cd "$BACKUP_DIR" && ls -t openclaw-backup-*.tar.gz | tail -n +8 | xargs -r rm

BACKUP_SIZE=$(du -sh "$BACKUP_FILE" | cut -f1)
echo "✅ 备份完成!文件大小: $BACKUP_SIZE"
echo "   保留最近 7 个备份,已清理旧备份"

自动化备份

将此脚本加入 crontab 实现每日自动备份:

bash
# 每天凌晨 3 点执行备份
0 3 * * * /path/to/backup-openclaw.sh >> /var/log/openclaw-backup.log 2>&1

日志轮转脚本

防止日志文件过大占满磁盘:

bash
#!/bin/bash
# rotate-logs.sh - OpenClaw 日志轮转脚本

LOG_DIR="${OPENCLAW_HOME:-$HOME/.openclaw}/logs"
MAX_SIZE_MB=50
MAX_FILES=10

echo "🔄 开始日志轮转..."

for log_file in "$LOG_DIR"/*.log; do
  [ -f "$log_file" ] || continue
  
  FILE_SIZE_MB=$(du -m "$log_file" | cut -f1)
  
  if [ "$FILE_SIZE_MB" -gt "$MAX_SIZE_MB" ]; then
    echo "   轮转: $(basename $log_file) (${FILE_SIZE_MB}MB > ${MAX_SIZE_MB}MB)"
    TIMESTAMP=$(date +%Y%m%d_%H%M%S)
    mv "$log_file" "${log_file}.${TIMESTAMP}"
    gzip "${log_file}.${TIMESTAMP}"
    touch "$log_file"
  fi
done

# 清理超出保留数量的旧日志
for log_base in "$LOG_DIR"/*.log; do
  [ -f "$log_base" ] || continue
  BASE_NAME=$(basename "$log_base" .log)
  ls -t "$LOG_DIR"/${BASE_NAME}.log.*.gz 2>/dev/null | tail -n +$((MAX_FILES + 1)) | xargs -r rm
done

echo "✅ 日志轮转完成"

健康检查脚本

用于监控 OpenClaw 服务状态并发送告警:

bash
#!/bin/bash
# health-check.sh - OpenClaw 健康检查脚本

WEBHOOK_URL="${ALERT_WEBHOOK_URL:-}"  # 告警 Webhook 地址(可选)
CHECK_INTERVAL=60  # 检查间隔(秒)

check_health() {
  # 检查进程是否运行
  if ! openclaw status > /dev/null 2>&1; then
    echo "❌ [$(date)] OpenClaw 服务未运行"
    return 1
  fi

  # 检查 HTTP 端口
  HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:7681/api/health)
  if [ "$HTTP_CODE" != "200" ]; then
    echo "❌ [$(date)] API 健康检查失败,HTTP 状态码: $HTTP_CODE"
    return 1
  fi

  # 检查磁盘空间(剩余低于 1GB 告警)
  AVAIL_KB=$(df -k "${OPENCLAW_HOME:-$HOME/.openclaw}" | tail -1 | awk '{print $4}')
  if [ "$AVAIL_KB" -lt 1048576 ]; then
    echo "⚠️ [$(date)] 磁盘空间不足,剩余: $((AVAIL_KB / 1024))MB"
    return 1
  fi

  echo "✅ [$(date)] 所有检查通过"
  return 0
}

send_alert() {
  local message="$1"
  if [ -n "$WEBHOOK_URL" ]; then
    curl -s -X POST "$WEBHOOK_URL" \
      -H "Content-Type: application/json" \
      -d "{\"text\": \"🚨 OpenClaw 告警: $message\"}"
  fi
}

# 主循环
while true; do
  if ! check_health; then
    send_alert "健康检查失败,请及时处理"
  fi
  sleep "$CHECK_INTERVAL"
done

生产环境建议

生产环境中建议结合 systemd 或 supervisor 来管理此脚本,确保其持续运行。

批量配置更新脚本

在多实例环境中批量更新配置:

bash
#!/bin/bash
# batch-config.sh - 批量配置更新脚本
# 用法: bash batch-config.sh <配置键> <配置值>

CONFIG_KEY="$1"
CONFIG_VALUE="$2"

if [ -z "$CONFIG_KEY" ] || [ -z "$CONFIG_VALUE" ]; then
  echo "用法: bash batch-config.sh <key> <value>"
  echo "示例: bash batch-config.sh models.default deepseek-chat"
  exit 1
fi

echo "🔧 更新配置: $CONFIG_KEY = $CONFIG_VALUE"

# 更新配置
openclaw config set "$CONFIG_KEY" "$CONFIG_VALUE"

# 验证配置
CURRENT=$(openclaw config get "$CONFIG_KEY")
if [ "$CURRENT" = "$CONFIG_VALUE" ]; then
  echo "✅ 配置更新成功"
  
  # 如果修改了核心配置,提示需要重启
  case "$CONFIG_KEY" in
    gateway.*|models.default|channels.*)
      echo "⚠️ 此项配置修改后需要重启服务生效"
      read -p "是否立即重启?(y/N) " -n 1 -r
      echo
      if [[ $REPLY =~ ^[Yy]$ ]]; then
        openclaw restart
        echo "✅ 服务已重启"
      fi
      ;;
  esac
else
  echo "❌ 配置更新失败"
  exit 1
fi

迁移助手脚本

将 OpenClaw 从一台服务器迁移到另一台:

bash
#!/bin/bash
# migrate-openclaw.sh - OpenClaw 迁移助手
# 用法: bash migrate-openclaw.sh <目标服务器> <SSH用户>

TARGET_HOST="$1"
SSH_USER="${2:-root}"
OPENCLAW_HOME="${OPENCLAW_HOME:-$HOME/.openclaw}"

if [ -z "$TARGET_HOST" ]; then
  echo "用法: bash migrate-openclaw.sh <目标服务器IP> [SSH用户]"
  exit 1
fi

echo "🚀 开始迁移 OpenClaw 到 $SSH_USER@$TARGET_HOST"

# 步骤 1:在本地创建备份
echo "📦 步骤 1/4: 创建备份..."
BACKUP_FILE="/tmp/openclaw-migration-$(date +%Y%m%d).tar.gz"
openclaw backup create --output "$BACKUP_FILE"

# 步骤 2:传输到目标服务器
echo "📤 步骤 2/4: 传输备份到目标服务器..."
scp "$BACKUP_FILE" "$SSH_USER@$TARGET_HOST:/tmp/"

# 步骤 3:在目标服务器上恢复
echo "📥 步骤 3/4: 在目标服务器上恢复..."
ssh "$SSH_USER@$TARGET_HOST" "openclaw backup restore --input /tmp/$(basename $BACKUP_FILE)"

# 步骤 4:验证
echo "🔍 步骤 4/4: 验证目标服务器..."
ssh "$SSH_USER@$TARGET_HOST" "openclaw doctor"

echo "✅ 迁移完成!请在目标服务器上验证所有功能正常后,再停止源服务器的 OpenClaw 服务。"

自定义自动化脚本

利用 OpenClaw CLI 构建自定义工作流:

bash
#!/bin/bash
# custom-workflow.sh - 自定义自动化工作流示例

# 示例:每日自动生成报告并发送到企业微信
echo "📊 生成每日报告..."

# 获取昨日使用统计
USAGE=$(openclaw usage --date yesterday --format json)

# 使用 Agent 生成报告摘要
SUMMARY=$(openclaw run --prompt "请根据以下使用数据生成简洁的中文日报:$USAGE" --model deepseek-chat)

# 通过企业微信通道发送
openclaw channels send --name wecom --message "$SUMMARY"

echo "✅ 每日报告已发送"

脚本安全提示

  • 所有脚本在生产环境使用前,请先在测试环境验证
  • 包含 API Key 的脚本请设置 chmod 700 权限
  • 建议使用环境变量而非硬编码方式管理敏感信息

基于MIT协议开源 | 内容翻译自 官方文档,同步更新