如何循环执行备份脚本实现每周增量备份
周度循环增量备份实现方案
你现有脚本每次执行都会全量打包源目录并覆盖同名归档,无法实现增量效果,也没有配置周期调度,可按以下两步改造实现需求:
一、改造备份脚本,实现首次全量、后续增量的备份逻辑
借助tar自带的增量快照能力实现需求,逻辑如下:
- 首次运行脚本时自动执行全量备份,同时生成快照文件记录所有已备份文件的状态
- 后续每次运行时对比快照,仅备份新增、修改过的文件/目录(比如第二周新增的Kafka目录会被自动识别备份,已有未改动的文件不会重复打包)
- 保留原有排除日志、TC开头目录的规则
改造后的完整脚本:
#!/bin/bash # 源备份目录 Integrationserver="/home/ec2-user/source" # 备份目标目录 dest="/home/ec2-user/destination" # 增量快照文件路径,tar靠这个文件识别哪些文件需要增量备份 snapshot_file="$dest/.is_backup_snapshot.snar" # 基础变量配置 IS="source" hostname=$(hostname -s) # 归档文件带年-周标识,避免覆盖历史备份,比如ip-172-xx-source-2024-W22.tar.gz archive_file="$hostname-$IS-$(date +%Y-W%U).tar.gz" # 打印启动信息 echo "Starting weekly backup at $(date)" echo "Backing up $Integrationserver to $dest/$archive_file" echo # 执行备份,保留原有排除规则,加入增量快照参数 tar --exclude=/home/ec2-user/source/logs* \ --exclude=/home/ec2-user/source/TC* \ --listed-incremental="$snapshot_file" \ -zcf "$dest/$archive_file" \ "$Integrationserver" # 打印结束信息 echo echo "Backup finished at $(date)"
二、配置按周自动循环执行
使用Linux自带的crontab实现周度定时调度,步骤如下:
- 给脚本添加可执行权限,执行命令:
chmod +x /your/script/path/weekly_backup.sh(把路径替换成你实际存脚本的路径) - 编辑当前用户的定时任务配置,执行命令:
crontab -e - 在文件末尾添加如下定时规则,示例为每周日凌晨2点自动执行备份,执行日志写入指定文件方便排查:
0 2 * * 0 /your/script/path/weekly_backup.sh >> /home/ec2-user/backup_running.log 2>&1
注意事项
- 不要随意删除目标目录下的
.is_backup_snapshot.snar快照文件,删除后下次执行脚本会自动重新触发全量备份 - 备份恢复时需要按备份时间从早到晚依次解压所有归档包,即可得到完整的源目录内容
- 如果需要调整执行时间,修改crontab里的时间字段即可,比如要每周一凌晨1点跑就改成
0 1 * * 1
内容的提问来源于stack exchange,提问作者Varun K M
相关产品推荐
相关产品推荐

