毎日、毎週、毎年のバックアップ スクリプト

毎日、毎週、毎年のバックアップ スクリプト

cron で使用できる毎日/毎週/毎年のバックアップ スクリプトを実行する bash スクリプトを持っている人はいますか。

基本的に、バックアップは 3 つのフォルダーに保存されます。毎日のバックアップには、今週のバックアップ ファイルのみが含まれます。毎週のバックアップには、今月の毎週のバックアップ ファイルのみが含まれます。毎月のバックアップ フォルダーには、毎年のバックアップ ファイルが含まれます。

ありがとう!

答え1

次のツールをご覧ください:

これらのツールは要件を満たし、スクリプトの必要性をなくすかもしれません。私もスクリプトを使用していますが、それは特定の状況向けです。他の人が行った例が必要な場合は、2人がバックアップスクリプトを投稿しています。ここ

バックアップについては、ServerFault で徹底的に取り上げられています。バックアップ戦略を立てようとしている場合は、このサイトを検索することをお勧めします。特定の質問に対する回答が見つからない場合は、別の質問で質問することもできます。

答え2

いいえ、しかしそれは非常に簡単なことです。その一方で、あなたが提供した情報に基づいてあなたの質問に答えることは決して簡単なことではありません。

確かに、バックアップの種類 (毎日/毎週/毎年) と保存先を bash スクリプトではなく crontab から制御する方がはるかに簡単です (ただし、これは単に 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 と compressed はほぼどこでも利用可能ですが、それほど堅牢ではありません。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

すべてのバックアップを 1 つのフォルダー内でローテーションし、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 回バックアップが保存されます。

私はその論理の大部分をこのトピック

関連情報