实用维护脚本
本页面提供了一系列现成的运维脚本,帮助你自动化日常的 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权限 - 建议使用环境变量而非硬编码方式管理敏感信息
