
Hat jemand ein Bash-Skript, das ein tägliches/wöchentliches/jährliches Backup-Skript ausführt, das ich mit Cron verwenden kann?
Grundsätzlich werden die Backups in 3 Ordnern abgelegt. Das tägliche Backup enthält nur die Backupdateien dieser Woche. Das wöchentliche Backup enthält nur die wöchentliche Backupdatei dieses Monats und der monatliche Backupordner enthält die jährliche Backupdatei.
Danke!
Antwort1
Schauen Sie sich diese Tools an:
Möglicherweise stellen Sie fest, dass diese Tools die Anforderungen erfüllen und Sie keine Skripte mehr benötigen. Ich verwende auch Skripte, aber sie sind für bestimmte Situationen gedacht. Wenn Sie Beispiele dafür haben möchten, was andere Leute getan haben, haben zwei Leute ihre Backup-Skripte gepostet.Hier.
Backups wurden auf ServerFault ausführlich behandelt. Wenn Sie versuchen, eine Backup-Strategie zu entwickeln, empfehle ich Ihnen, die Site zu durchsuchen. Wenn Sie keine Antwort auf eine bestimmte Frage finden, können Sie diese in einer separaten Frage stellen.
Antwort2
Nein, aber es ist ganz einfach. Andererseits ist es alles andere als einfach, Ihre Frage anhand der von Ihnen bereitgestellten Informationen zu beantworten.
Natürlich wäre es viel einfacher, die Art der Sicherung (täglich/wöchentlich/jährlich) und das Ziel über die Crontab statt über das Bash-Skript zu steuern (obwohl das vielleicht einfach bedeutet, dem Has-Skript einen anderen Parameter zu senden).
Backups sind nicht unbedingt wichtig - die Möglichkeit,wiederherstellenIhre Daten sind sehr wichtig. Damit Ihr Backup einen Wert hat, muss es in einem Format vorliegen, das eine Wiederherstellung ermöglicht. Wir können Ihnen nicht sagen:
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
Beispielsweise sind Tar und Compress fast überall verfügbar, aber nicht sehr robust. CPIO ist robuster, bietet aber keine Komprimierungsunterstützung.
Antwort3
Warnung: In 5 Minuten zusammengehackt und ungetestet (ich habe Bash nicht installiert).
#!/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
In 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
Antwort4
Ich habe das Skript geschrieben, das alle Backups in einem Ordner rotiert und X tägliche, Y wöchentliche und Z monatliche Backups speichert.
Ich nehme alle Backups in Ordner
/root/backup/YYYYMMDD
auf täglicher Basis.
Dann habe ich das folgende rotierende Skript:
#!/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
Dadurch werden 7 tägliche, 4 wöchentliche, 12 monatliche und 5 jährliche Backups gespeichert.
Den größten Teil der Logik habe ich ausdieses Thema