Im letzten Beitrag habe ich Euch ein Script zur Datensicherung vorgestellt. Eine Datensicherung, die nur durchgeführt wird, wenn wir daran denken, ist aber noch nicht so optimal. Wünschenswert ist es, wenn das Script automatisch zu definierten Zeiten aufgerufen wird.

 

Linux bietet dafür sogenannte Cronjobs. Cronjobs können von jedem Benutzer 'für sich selbst' eingerichtet werden. Daneben gibt es aber auch systemweite Cronjobs. Die Jobs werden in Crontabs definiert. Das sind Dateien, in denen beschrieben wird, was wann ausgeführt werden soll. Jeder Job steht in einer Zeile, die folgendermaßen aufgebaut ist:

Minute Stunde Tag Monat Wochentag Befehl

Beispiel:

#M S T M W Befehl

5 9 * * * /pfad/zum/script.sh

Dieses Script würde jeden Tag um 9:05 Uhr ausgeführt werden. Die Crontab eines Users wird mit dem Befehl

crontab -e

aufgerufen. Auch root hat eine eigene Crontab, die man mit

sudo crontab -e

öffnen kann. Unser Datensicherungsscript möchten wir aber in der systemweiten Crontab eintragen. Die systemweite Crontab kann nur von root bearbeitet werden. Wir öffnen sie also mit

sudo mcedit /etc/crontab

Der Aufbau unterscheidet sich in einem einzigen Punkt: Es wird zusätzlich der User, unter dessem Kontext das Script ausgeführt werden soll, angegeben:

#M S T M W User Befehl

5 9 * * * root /pfad/zum/script.sh

Damit kann man auch Scripte für Benutzer definieren, die der Benutzer selbst nicht ändern kann.

Ein ausführliche Beschreibung der möglichen Optionen findet Ihr u.a. bei Ubuntuusers.de

In meinem Script kann ja ausgewählt werden, ob eine Vollsicherung oder eine inkrementelle Sicherung gemacht werden soll. Ich möchte jeden Samstag un 6 Uhr morgens eine Vollzicherung durchführen, an den restlichen Tagen soll inkrementell gesichert werden. In einer Firma wäre wohl eine Zeit nach Feierabend sinnvoller. Da es sich hier aber um meinen privaten Server handelt, ist morgens um sechs meine Wahl, da ich dann entweder noch im Bett liege oder auf dem Weg zur Arbeit bin.

Ich könnte nun das Script so ändern, daß im Script der Wochentag gecheckt wird und in Abhängigkeit davon eine Voll- oder Inkrementellsicherung gemacht wird, z.B. mit

$(date +%w)

Hier steht 0 für Sonntag, 1, für Montag usw.

Mein Script soll aber nicht geändert werden, schließlich will ich es vielleicht auch mal manuell anstoßen, weil ich z.B. ein paar wichtige Dateien sofort sichern möchte. Deshalb trage ich lieber zwei Zeilen in die systemweite Crontab ein:

0 6 * * * 6 root /usr/local/scripts/backup.sh -f Allgemein Media sysadmin Bibo Willi

0 6 * * * 0-5 root /usr/local/scripts/backup.sh Allgemein Media sysadmin Bibo Willi

Jetzt wird wie gewünscht, jeden Samstag (6) eine Vollsicherung durchgeführt, von Sonntag bis Freitag (0-5) wird inkrementell gesichert.

Wichtig! Jede Crontab muß mit einer Leerzeile oder einem Kommentar ändern, damit sie korrekt ausgeführt wird. Also am Ende unbedingt eine Kommentarzeile schreiben. Das kann auch nur eine Raute (#) sein.

Änderungen im Script:

Wenn das Script auch als Cronjob einwandfrei läuft, aktiviere ich die bisher auskommentierten Zeilen für das Mounten/Dismounten der Sicherungsplatte. Muß man nicht machen, ist mir jedoch sicherer. Wenn ich etwas von Hand mit der Platte veranstalte, bin ich mir so bewußt, wo ich grade dran runbastele, da ich sie ja auch dafür explizit mounten muß. Da das Laufwerk nun nicht ständig online ist, lege ich die Logdateien auch in das Scriptverzeichnis, also unter /usr/local/scripts/log

Denkbar wäre auch, nach einer erfolgreichen Vollsicherung z.B. die unter 'old' gesicherten vorherigen Sicherungen automatisch zu löschen, damit der Plattenplatz nicht knapp wird.

Zusätzliche Informationen