![每日,每周,每年备份脚本](https://linux22.com/image/521404/%E6%AF%8F%E6%97%A5%EF%BC%8C%E6%AF%8F%E5%91%A8%EF%BC%8C%E6%AF%8F%E5%B9%B4%E5%A4%87%E4%BB%BD%E8%84%9A%E6%9C%AC.png)
有人有可以执行每日/每周/每年备份脚本的 bash 脚本吗,我可以将其与 cron 一起使用。
基本上它会将备份放入 3 个文件夹中。每日备份只会包含本周的备份文件。每周备份只会包含本月的每周备份文件,而月备份文件夹则会包含年度备份文件。
谢谢!
答案1
答案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 个每年备份。
我从中得到了大部分逻辑这个话题