#!/bin/bash
# Den Pfad zum Quell- und Backupverzeichnis
ohne abschließenden Schrägstrich '/' angeben.
quelle=/pfad/quelle
# Welches Verzeichnis soll gesichert werden?
backup=/pfad/backup
# Wo sollen die Sicherungen gespeichert werden?
nosave=/pfad/exclude.txt
# Ausschlüsse werden in dieser Datei zeilenweise eingetragen.
# Ab hier muss man eigentlich nichts mehr ändern.
# Ausschlussdatei neu anlegen, nur falls noch keine existiert:
touch $nosave
# Datum ermitteln:
wochentag=$(date +"%a")
# %a = Wochentag in Kurzform als Text. Beachtet dabei, dass der Inhalt der Variable von der eingestellten Sprache im System abhängig ist.
tag=$(date +"%d")
# %d = Tagdatum als zweistellige Zahl.
monat=$(date +"%m")
# %m = Monatsdatum als zweistellige Zahl.
# Backup Funktion definieren:
function backup ()
{
rsync -rtpgov --delete --checksum -hh --stats --exclude-from="$nosave" --link-dest="$quelle/"
"$quelle/" "$backup/$1/" >"$backup/_letzte_Sicherung.txt" 2>&1
# alle protokollierende Standardausgaben und ggf. auftretende Fehlerausgaben (2>&1) werden in der Datei "_letzte_Sicherung.txt" gespeichert.
echo -e '\n'-- '\n'letzte Sicherung: $(date "+%Y-%m-%d %H:%M:%S") >> "$backup/_letzte_Sicherung.txt"
# Das Logfile kann während der Sicherung nicht direkt im Sicherungsordner liegen, so dass dieses im Anschluss dorthin verschoben wird.
mv $backup/_letzte_Sicherung.txt $backup/$1/_letzte_Sicherung_$(date "+%Y-%m-%d").txt
# Optional: Sicherungsprotokoll per E-Mail versenden.
Ein eingerichteter MTA (mail transfer agent siehe Punkte A-I) ist Voraussetzung:
#
mail -s "Protokoll" backup@ctaas.com <$backup/$1/_letzte_Sicherung*.txt
}
## tägliche Sicherung (Montag - Sonntag):
# Nur wenn der Tag nicht der 01, 09, 16 oder 24 ist wird hier gesichert - sonst wird eine Wochen- oder Monatssicherung durchgeführt:
if [[ $tag != 01 && $tag != 09 && $tag != 16 && $tag != 24 ]]; then
# und wenn Wochentag = ... dann Sicherung im Unterordner vom Wochentag:
case "$wochentag" in Mo|Di|Mi|Do|Fr|Sa|So) backup $wochentag ;; esac
# Hinweis: Bei einem Betriebssystem mit englischer Spracheinstellung muss man die Wochentagsnamen wie folgt verändern: '
Mon|Tue|Wed|Thu|Fri|Sat|Sun'.
fi
## Wochensicherungen:
# Hinweis:
# 1. Woche ist die Monatssicherung.
# 2. Woche (9. Tag):
case "$tag" in 09) backup 09 ;; esac
# 3. Woche (16. Tag):
case "$tag" in 16) backup 16 ;; esac
# 4. Woche (24. Tag):
case "$tag" in 24) backup 24 ;; esac
## Monatssicherungen:
# wenn gerader Monat (Mg):
case "$monat" in 02|04|06|08|10|12)
# und wenn 1.ter im Monat:
case "$tag" in 01)
backup Mg
;; esac
;; esac
# wenn ungerader Monat (Mu):
case "$monat" in 01|03|05|07|09|11)
# und wenn 1.ter im Monat:
case "$tag" in 01)
backup Mu
;; esac
;; esac
# Alternativ: Jeden Monat ein Backup am 1. des Monats:
#
case "$tag" in 01) backup Monat_$monat ;; esac
# Alternativ: Jahressicherung am 1.1. des Jahres:
#
case "$tag" in 01) case "$monat" in 01) backup Jahr_$(date +"%Y")
;; esac ;; esac
# rsync script: 2020-03-17 © ctaas.de, A. Schröder