每日、每週、每年備份腳本

每日、每週、每年備份腳本

任何人都有任何可以執行每日/每週/每年備份腳本的 bash 腳本,我可以將其與 cron 一起使用。

基本上它會將備份放入 3 個資料夾中。每日備份只會有本週的備份檔。每週備份資料夾中只有本月的每週備份文件,而月備份資料夾則包含每年的備份文件。

謝謝!

答案1

看看這些工具:

您可能會發現這些工具可以滿足要求並消除您對腳本的需求。我也使用腳本,但它們是針對特定情況的。如果您想了解其他人所做的事情的範例,兩個人已經發布了他們的備份腳本這裡

ServerFault 上已詳盡介紹了備份。如果您正在嘗試制定備份策略,我建議您搜尋該網站。如果您無法找到某個特定問題的答案,您可以在單獨的問題中提出。

答案2

不——但是做起來非常簡單。 OTOH 根據您提供的資訊來回答您的問題絕非易事。

當然,從 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 個每年備份。

我已經得到了大部分邏輯這個話題

相關內容