You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何循环执行备份脚本实现每周增量备份

周度循环增量备份实现方案

你现有脚本每次执行都会全量打包源目录并覆盖同名归档,无法实现增量效果,也没有配置周期调度,可按以下两步改造实现需求:

一、改造备份脚本,实现首次全量、后续增量的备份逻辑

借助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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:24:15