
cron で使用できる毎日/毎週/毎年のバックアップ スクリプトを実行する bash スクリプトを持っている人はいますか。
基本的に、バックアップは 3 つのフォルダーに保存されます。毎日のバックアップには、今週のバックアップ ファイルのみが含まれます。毎週のバックアップには、今月の毎週のバックアップ ファイルのみが含まれます。毎月のバックアップ フォルダーには、毎年のバックアップ ファイルが含まれます。
ありがとう!
答え1
答え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 回バックアップが保存されます。
私はその論理の大部分をこのトピック