每日,每周,每年备份脚本

每日,每周,每年备份脚本

有人有可以执行每日/每周/每年备份脚本的 bash 脚本吗,我可以将其与 cron 一起使用。

基本上它会将备份放入 3 个文件夹中。每日备份只会包含本周的备份文件。每周备份只会包含本月的每周备份文件,而月备份文件夹则会包含年度备份文件。

谢谢!

答案1

看看这些工具:

您可能会发现这些工具满足要求并消除了您对脚本的需求。我也使用脚本,但它们适用于特定情况。如果您想了解其他人所做的示例,有两个人发布了他们的备份脚本这里

ServerFault 上已详尽介绍了备份。如果您正在尝试制定备份策略,我建议您搜索该网站。如果您无法找到某个问题的答案,您可以在单独的问题中提出该问题。

答案2

不 - 但做起来很简单。另一方面,根据您提供的信息回答您的问题绝非易事。

当然,从 crontab 而不是 bash 脚本来控制备份类型(每日/每周/每年)和目标要简单得多(尽管这可能只是向 has 脚本发送不同的参数的问题)。

备份本身并不重要 - 能够恢复您的数据非常重要 - 因此,要使您的备份具有任何价值,它必须采用允许您恢复的格式。我们不能告诉您:

1) Which backup format is appropriate for your data
2) what backup tools you have on your system which are scriptable
3) what restore tools you are likely to have access to if you suffer a complete system failure
4) whether you need to support multi-volume / media changes in your backup

例如 tar 和 compress 几乎普遍可用 - 但它不是很强大。CPIO 更强大,但不包含压缩支持。

答案3

警告:5 分钟内完成破解且未经测试(我没有安装 Bash)。

#!/bin/bash
#Usage: $0 [Yearly,Monthly,Weekly]

set PROTECTEDFILES = "/etc /usr/home /usr/local/etc"
set BACKUPDIR = "/usr/backups"
set BACKUPTAR = backup-`hostname -s`-`date "+%F"`.tgz

tar czf $BACKUPDIR/$1/$BAKCUPTAR $PROTECTEDFILES

在 crontab 中:

0   0   1   1   *   root   /root/sbin/my_backup Yearly
0   0   1   *   *   root   /root/sbin/my_backup Monthly
0   0   *   *   6   root   /root/sbin/my_backup Weekly

答案4

我已经编写了一个脚本,可以轮换一个文件夹内的所有备份,每天保留 X 个备份,每周保留 Y 个备份,每月保留 Z 个备份。

我把所有备份都放到文件夹中

/root/backup/YYYYMMDD 

每天。

然后,我有以下旋转脚本:

#!/bin/bash

echo > /root/keep.txt
#writing dates of the backups that should be kept to the array

for i in {0..7}; do ((keep[$(date +%Y%m%d -d "-$i day")]++)); done
for i in {0..4}; do ((keep[$(date +%Y%m%d -d "sunday-$((i+1)) week")]++)); done
for i in {0..12}; do
        DW=$(($(date +%-W)-$(date -d $(date -d "$(date +%Y-%m-15) -$i month" +%Y-%m-01) +%-W)))
        for (( AY=$(date -d "$(date +%Y-%m-15) -$i month" +%Y); AY < $(date +%Y); AY++ )); do
        ((DW+=$(date -d $AY-12-31 +%W)))
        done
        ((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
done
for i in {0..5}; do
        DW=$(date +%-W)
        for (( AY=$(($(date +%Y)-i)); AY < $(date +%Y); AY++ )); do
        ((DW+=$(date -d $AY-12-31 +%W)))
        done
        ((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
        done

#writing the array to file keep.txt line by line
for i in ${!keep[@]}; do echo $i >> /root/keep.txt; done

#delete all files that not mentioned in keep.txt
cd /root/backup
ls -1 /root/backup/ | sort /root/keep.txt /root/keep.txt - | uniq -u | xargs rm -rf
rm /root/keep.txt

这将保留 7 个每日备份、4 个每周备份、12 个每月备份和 5 个每年备份。

我从中得到了大部分逻辑这个话题

相关内容