#!/bin/bash # 备份脚本 # 每日凌晨2点执行,备份重要配置和数据 echo "💾 $(date '+%Y-%m-%d %H:%M:%S') - 开始执行备份任务" # 定义备份目录 BACKUP_DIR="/var/backups/ocngx" BACKUP_DATE=$(date '+%Y%m%d_%H%M%S') BACKUP_FILE="ocngx_backup_${BACKUP_DATE}.tar.gz" # 创建备份目录 mkdir -p "$BACKUP_DIR" # 定义需要备份的文件列表 BACKUP_ITEMS=" /etc/AGENT.md /app/opencode.json /usr/local/openresty/nginx/conf/nginx.conf /usr/local/openresty/nginx/conf/conf.d /usr/local/openresty/nginx/html /etc/cron-jobs /etc/cron.d " echo "📦 创建备份归档..." # 创建临时备份目录 TEMP_BACKUP_DIR="/tmp/ocngx_backup_${BACKUP_DATE}" mkdir -p "$TEMP_BACKUP_DIR" # 复制重要文件 for item in $BACKUP_ITEMS; do if [ -e "$item" ]; then echo " • 备份: $item" cp -r "$item" "$TEMP_BACKUP_DIR/" 2>/dev/null else echo " • 跳过: $item (不存在)" fi done # 创建备份信息文件 cat > "$TEMP_BACKUP_DIR/backup_info.txt" << EOF OCNGX 备份信息 ================ 备份时间: $(date '+%Y-%m-%d %H:%M:%S') 备份版本: ${BACKUP_DATE} 系统信息: $(uname -a) 磁盘使用: $(df -h / | awk 'NR==2 {print $2 " used, " $4 " free"}') OpenCode 版本: $(curl -s http://127.0.0.1:3000/global/health 2>/dev/null | grep -o '"version":"[^"]*' | cut -d'"' -f4 || echo "未知") EOF # 创建压缩归档 echo "🗜️ 压缩备份文件..." tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" -C "/tmp" "ocngx_backup_${BACKUP_DATE}" 2>/dev/null # 检查备份是否成功 if [ -f "${BACKUP_DIR}/${BACKUP_FILE}" ]; then BACKUP_SIZE=$(du -h "${BACKUP_DIR}/${BACKUP_FILE}" | cut -f1) echo "✅ 备份成功: ${BACKUP_FILE} (${BACKUP_SIZE})" else echo "❌ 备份失败: 无法创建备份文件" rm -rf "$TEMP_BACKUP_DIR" exit 1 fi # 清理临时目录 rm -rf "$TEMP_BACKUP_DIR" # 清理旧备份(保留最近7个) echo "🧹 清理旧备份文件..." cd "$BACKUP_DIR" ls -t ocngx_backup_*.tar.gz 2>/dev/null | tail -n +8 | xargs -r rm -f # 显示备份目录状态 BACKUP_COUNT=$(ls -1 "$BACKUP_DIR"/ocngx_backup_*.tar.gz 2>/dev/null | wc -l) echo "📊 备份目录状态: $BACKUP_COUNT 个备份文件" echo "📁 备份目录大小: $(du -sh "$BACKUP_DIR" 2>/dev/null | cut -f1)" # 可选:如果配置了外部存储,可以上传备份 # if [ -n "$BACKUP_S3_BUCKET" ]; then # echo "☁️ 上传备份到 S3..." # aws s3 cp "${BACKUP_DIR}/${BACKUP_FILE}" "s3://${BACKUP_S3_BUCKET}/ocngx-backups/" 2>/dev/null # fi echo "✅ $(date '+%Y-%m-%d %H:%M:%S') - 备份任务完成" echo "---"