#!/bin/bash # 基础配置 backup_dir="/mnt/mydata/backup" # 本地备份路径 data_dir="/mnt/mydata" # 要备份的目录 hostname=$(hostname) # 获取主机名 cloud_dir="backup/$hostname" # 云端存储路径,使用hostname区分 log_file="/var/log/bypy_backup.log" # 日志文件 max_cloud_backups=2 # 云端最多保留的备份数量 # 日志函数 log_message() { echo "$(date +'%Y-%m-%d %H:%M:%S') - $1" >> "$log_file" echo "$1" } # 创建本地备份目录 mkdir -p "$backup_dir" # 生成备份文件名 backup_file="backup-$hostname-$(date +'%Y-%m-%d').tar.gz" backup_path="$backup_dir/$backup_file" # 1. 创建新备份 log_message "开始创建备份文件..." tar -czf "$backup_path" \ --exclude="$data_dir/.Recycle_bin" \ --exclude="$backup_dir" \ "$data_dir" 2>/dev/null if [ $? -eq 0 ]; then log_message "备份文件创建成功: $backup_path" else log_message "备份文件创建失败" exit 1 fi # 2. 清理本地旧备份 num_local_backups=$(ls -l "$backup_dir" | grep ^- | grep 'backup-' | wc -l) if [ $num_local_backups -gt 1 ]; then oldest_local_backup=$(ls -t "$backup_dir" | grep 'backup-' | tail -1) rm "$backup_dir/$oldest_local_backup" log_message "删除本地旧备份: $oldest_local_backup" fi # 3. 同步到云端 log_message "确保云端目录存在..." /www/server/pyporject_evn/versions/3.13.0/bin/bypy mkdir "$cloud_dir" log_message "开始上传到云端..." /www/server/pyporject_evn/versions/3.13.0/bin/bypy syncup "$backup_dir" "$cloud_dir" 2>&1 | while IFS= read -r line; do if [[ $line =~ ^\[.*%.*MB\/.*MB.*ETA.* ]] || [[ $line =~ ^Done$ ]] || [[ $line == *"100%"* ]]; then echo "$line" echo "$(date +'%Y-%m-%d %H:%M:%S') - $line" >> "$log_file" fi done # 4. 清理云端旧备份 log_message "清理云端旧备份..." cloud_backups=$(/www/server/pyporject_evn/versions/3.13.0/bin/bypy list "$cloud_dir" | grep "backup-" | awk '{print $NF}') cloud_backup_count=$(echo "$cloud_backups" | wc -l) if [ "$cloud_backup_count" -gt "$max_cloud_backups" ]; then old_cloud_backups=$(echo "$cloud_backups" | head -n -$max_cloud_backups) while IFS= read -r backup; do /www/server/pyporject_evn/versions/3.13.0/bin/bypy delete "$cloud_dir/$backup" log_message "删除云端旧备份: $backup" done <<< "$old_cloud_backups" fi log_message "云端备份清理完成" # 显示当前云端备份列表 log_message "当前云端备份列表:" /www/server/pyporject_evn/versions/3.13.0/bin/bypy list "$cloud_dir" >> "$log_file"