Kapitel 18

Datensicherung

IN DIESEM KAPITEL

  • Daten als zentrale Elemente eines Servers sichern
  • Die Rekonstruktion nicht aus dem Auge verlieren
  • Fehlermeldung als E-Mail senden

Viele Computerbenutzer behandeln das Thema Datensicherung so, als sei eine Festplatte unzerstörbar. Sollte eine Festplatte einmal das Gegenteil beweisen, kommt die Frage nach dem Backup auf. Gut, wenn man schon vorher darüber nachgedacht hat.

Die Datensicherung wird aber nicht obsolet, wenn man eine supersichere Festplatte besitzt. Die Daten können durch Diebstahl des Rechners, durch Abbrennen des Serverraums, durch Sabotage oder durch ein fieses Viren verloren gehen.

Vorüberlegungen zur Datensicherung

Jede Datensicherung ist mit Aufwand verbunden. Das Sichern der Datenbestände erfordert Zeit, die der Forderung nach ständiger Verfügbarkeit der EDV entgegensteht.

Unersetzliche Benutzerdaten

Bei der Frage, welche Daten mit welcher Priorität gesichert werden müssen, steht die Wiederbeschaffbarkeit im Mittelpunkt. Die Software, die Sie gekauft haben, können Sie vermutlich auf den gleichen Wegen wiederbeschaffen.

Alle Daten, die Sie selbst erstellen, wie Bestellungen, Buchungen, Kundendaten, Verträge, Planungen und auch Fotos, können Sie nicht am Markt wiederbeschaffen. Diese Daten befinden sich unter Linux an klar definierten Orten.

  • Benutzerdaten liegen bei Linux unterhalb des Verzeichnisses /home.
  • Serverprozesse legen ihre Daten allerdings vorzugsweise unterhalb von /var ab.
  • Konfigurationen befinden sich in /etc, verändern sich aber typischerweise nicht täglich.

Die Unternehmensdaten werden heutzutage meist in Datenbanken abgelegt. Diese legen zwar ihre Daten auch meist in /var ab. Eine einfache Kopie bei laufender Datenbank wird vermutlich zu einem inkonsistenten und damit unbrachbaren Zustand führen. Darum werden Datenbanken in der Regel durch deren eigene Mechanismen gesichert, die meist ohne Unterbrechung des Betriebs funktionieren. Dazu lesen Sie auch das Kapitel 9.

Katastrophenszenarien

Eine schöne Übung und guter Test ist es, einen nackten Rechner so herzurichten, dass er als Ersatz des Servers verwendet werden kann und dabei die Stoppuhr laufen zu lassen. Jede Datensicherung ist sinnlos, wenn man aus ihr den Originalzustand nicht wieder herstellen kann.

Anstatt den gesamten Bestand zu sichern, kann man auch versuchen, Änderungen zu sichern und nur an den Wochenenden eine Komplettsicherung zu fahren. Die Rekonstuktion wird aufwändiger, muss doch zuerst die Vollsicherung geladen und dann alle Differenzsicherungen zurückgeholt werden. Dieses Verfahren nennt man inkrementelle Sicherung.

Systemsicherung

Die Sicherung der eigenen Daten genießt höchste Priorität. Allerdings dauert das Aufsetzen eines neuen Betriebssystem und die Installation der Software seine Zeit. In dieser Zeit steht der Betrieb still. Aus diesem Grund kann es sinnvoll sein, von Zeit zu Zeit auch das Gesamtsystem zu sichern.

Wohin mit der Datenflut?

Bei der Medienauswahl für die Datensicherung sind die Geschwindigkeit der Sicherung und der Wiederherstellung, die Kapazität und der Preis pro Datenmenge relevant. Werfen wir einen Blick auf die Kandidaten:

  • Das Bandlaufwerk

    Der Klassiker unter den Datensicherungsmedien ist das Bandlaufwerk. Früher glänzte es mit hoher Kapazität zu kleinem Preis der Medien. Inzwischen sind Festplatten größer und billiger geworden und laufen den Bändern den Rang ab.

    Insbesondere bei langfrisitigen Sicherungen ist es wichtig, nicht nur die Datensicherung verfügbar zu haben, sondern auch das Gerät, mit der man sie wieder zurückholt. Sollte der Server mit dem eingebauten Bandlaufwerk verbrennen, muss ein weiteres Bandlaufwerk verfügbar sein, dass das Datenformat lesen kann. Diese Frage sollte man natürlich auch bei allen anderen Medien im Hinterkopf haben.

  • Selbstgebranntes

    Ein DVD-Brenner ist für kleines Geld zu bekommen. Auch die Medien sind nicht teuer. Gerät und Medien sind also leicht verfügbar. Früher wurde so gern archiviert. Allerdings ist die Medienkapazität für heutige Verhältnisse relativ klein und das Brennen dauert einfach zu lang.

  • Externe Festplatten

    Festplatten eignen sich naturgemäß prima, um Festplatten zu sichern. Und tatsächlich werden diese häufig direkt oder indirekt verwendet.

    Wird die Festplatte beispielsweise durch einen USB-Adapter als Dateisystem eingebunden, besteht sowohl bei der Datensicherung als auch bei der Rekonstruktion das Risiko, dass die Datensicherung durch ein Virus kompromitiert werden. Ist der Rechner infiziert, an den die Festplatte angeschlossen wird, ist die Datensicherung wertlos.

  • Lokales Netzwerk (NAS)

    Anstatt eine Festplatte per USB anzuschließen, werden diese häufig als NAS (Network Attached Storage) im Netzwerk zur Verfügung gestellt. Hier gilt wie bei der Datensicherung auf USB-Festplatten das Risiko für den Zeitraum, in dem die NAS als Dateisystem von einem infizierten Rechner eingebunden werden, sowohl bei der Datensicherung als auch bei der Rekonstruktion. Dasselbe gilt bei der Synchronisation über einen Nextcloud-Client.

    Statt eines Einhängens empfehlen sich Fernkopien wie scp, rsync oder tar.

  • Die Cloud

    Mithilfe einer Cloud kann man seine Daten im Internet sichern. Letztlich entspricht die Vorgehensweise der einer Sicherung in einer NAS. Die Cloud hat den Vorteil, dass sie außer Haus ist. Im Falle eines Brandes ist die Datensicherung noch vorhanden.

    Allerdings geben Sie damit Ihre Daten in die Hände einer kommerziellen Firma. Beispielsweise zwingt die Rechtslage in den USA amerikanische Firmen dazu, mit den Geheimdiensten zusammenzuarbeiten, die ihre Erkenntnisse wieder amerikanische Unternehmen weitergeben. Man darf davon ausgehen, dass es in China und anderen Ländern ähnlich sein kann.

    Anstatt auf die politische Integrität des Anbieters zu hoffen, ist es klüger, die dort geparkten Daten vor dem Versenden selbst zu verschlüsseln. Siehe dazu auch das Kapitel 17.

dump sichert komplette Dateisysteme

Das Programm dump ist ein Klassiker der Datensicherungswerkzeuge. Seine besonderen Fähigkeiten liegen darin, Dateisysteme komplett sichern zu können und dabei ihre systemspezifischen Eigenschaften zu bewahren. Das Programm beherrscht die inkrementelle Sicherung, ermöglicht die Sicherung auf Band, unterstützt den Medienwechsel, wenn das Sicherungsmedium kleiner als die zu sichernden Daten ist, und kann eine Datensicherung über das Netzwerk durchführen.

Das Programm gehört nicht zum Standardumfang einer Linux-Installation, sondern muss mit dem Paket dump explizit installiert werden:

# apt install dump

Der Befehl dump erhält als Parameter das zu sichernde Dateisystem. Sie können aber auch einzelne Dateien oder Verzeichnisse angeben.

Inkrementelle Datensicherung

Als Option kann eine ganzzahlige Levelnummer angegeben werden, der ein Minuszeichen vorangestellt wird. Die Option -0 steht für eine Vollsicherung. Jede andere Zahl sichert nur die Dateien, die sich seit der letzten Sicherung des nächstniedrigeren Levels verändert haben.

Ziel

Die Option -f erwartet einen weiteren Parameter, der angibt, wohin die Sicherung geschrieben werden soll. Auf diese Weise können die Gerätedatei eines Bandlaufwerks angegeben werden, ein Minuszeichen für die Standardausgabe, um den Datenstrom in eine Pipe umzuleiten, oder auch das Bandlaufwerk eines anderen Computers. In letzterem Fall wird der Hostname, gefolgt von einem Doppelpunkt, vor die Laufwerksangabe gestellt: host:/dev/tape.

Beispiel

Mit dem folgenden Sicherungslauf wird das Dateisystem /dev/sda8 in die Datei dasi100809.dump gesichert:

# dump -0u -f dasi20100809.dump /dev/sda8
DUMP: Date of this level 0 dump: Mon Aug 9 09:20:30 2010
DUMP: Dumping /dev/sda8 (an unlisted file system)
to dasi20100809.dump
DUMP: Label: none
DUMP: Writing 10 Kilobyte records
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 2699235 blocks.
DUMP: Volume 1 started with block 1 at:
Mon Aug 9 09:20:37 2010
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Closing dasi20100809.dump
DUMP: Volume 1 completed at: Mon Aug 9 09:23:12 2010
DUMP: Volume 1 2706480 blocks (2643.05MB)
DUMP: Volume 1 took 0:02:35
DUMP: Volume 1 transfer rate: 17461 kB/s
DUMP: 2706480 blocks (2643.05MB) on 1 volume(s)
DUMP: finished in 155 seconds, throughput 17461 kBytes/sec
DUMP: Date of this level 0 dump: Mon Aug 9 09:20:30 2010
DUMP: Date this dump completed: Mon Aug 9 09:23:12 2010
DUMP: Average transfer rate: 17461 kB/s
DUMP: DUMP IS DONE
#

Soll die Datensicherung nicht eine Datei sondern auf ein Bandgerät laufen, müsste lediglich das Ziel hinter -f geändert werden.

# dump -0u -f /dev/st0 /dev/sda8

Daten zurückholen: restore

Der Befehl restore gehört zum Paket dump und holt gesicherte Datenbestände zurück. Mit der Option -r werden die gesicherten Daten im aktuellen Verzeichnis rekonstruiert. Wenn Sie also den Inhalt des Dateisystems /dev/sda1 vom Bandgerät /dev/st0 zurückholen wollen, geben Sie die folgenden Befehle ein:

# mkfs /dev/sda1
# mount /dev/sda1 /mnt
# cd /mnt
# restore rf /dev/st0

Sollten Sie eine inkrementelle Sicherung betreiben, wird  restore nacheinander alle relevanten Bänder anfordern.

Daten sichern mit dem Verpackungskünstler tar

Das Programm tar wird heutzutage meist verwendet, um ganze Verzeichnisse in einer Datei zu verpacken. Der Name tar steht für »tape archiver«, also »Band-Archivierer«. Wenn Sie tar keine Option -f für die Zieldatei angeben, wird es tatsächlich versuchen, das Standardbandlaufwerk in Ihrem System zu finden und zu verwenden.

Im ersten Parameter des Kommandos tar legen Sie die Operation mit einem Buchstaben fest. Nur einer dieser Buchstaben kann darin auftreten:

c

Die Option erzeugt ein Archiv. Eine Datensicherung wird angelegt.

x

Ein Archiv wird ausgepackt. Die Datensicherung wird zurückgeholt.

t

Der Inhalt eines Archivs wird angezeigt.

Übrigens kann man vor diese Option auch ein Minuszeichen setzen, was im Linux-Umfeld auch passender ist. Die Option können durch weitere Optionen ergänzt werden.

f

gibt das Sicherungsziel an. Der auf das f zuerst folgende Paramter wird als Dateiname des Archivs verwendet.

Beispiel: Sollen die Verzeichnisse /home und /etc in die Datei dasi.tar gesichert werden, lautet der Befehl:

# tar cf dasi.tar /home /etc

Es können beliebig viele Dateien und Verzeichnisse an den Befehl angehängt werden, sie werden alle in die Datensicherung mit einbezogen. Bei Verzeichnissen werden auch deren Unterverzeichnisse mit eingebunden.

v

Wenn Sie wissen wollen, welche Dateien gesichert oder entpackt werden, mischen Sie der Buchstabenkombination noch ein v bei.

z

Die Option z wird die Dateien beim ein- oder auspacken komprimieren. Dazu wird das Programm  gzip verwendet. Ein komprimiertes tar-Archiv wird nach Konvention mit der Endung .tgz oder .tar.gz gekennzeichnet.

tar sichert über das Netzwerk

Die Datensicherung von tar kann auch über das Netzwerk gesendet werden. Dazu wird als Zieldatei eine Datei auf einem anderen Rechner angegeben. Es ist mit dieser Methode beispielsweise auch möglich, das Bandlaufwerk auf einer anderen Maschine anzusprechen.

Um eine Datei auf einem anderen Rechner anzusprechen, muss vor ihrem Namen der Rechnername angegeben werden. Um beides voneinander zu trennen, wird der Doppelpunkt verwendet. Das folgende Beispiel sichert die lokalen Benutzerverzeichnisse (/home) in die Datei dasi.tgz auf dem Rechner dasisrv.

$ tar cvzf dasisrv:dasi.tgz /home

Hier wird der Aufrufer nach dem Passwort gefragt. Da im Hintergrund der Befehl ssh werkelt, können auch Schlüssel hinterlegt werden, um die Passwortabfrage zu vermeiden, so wie es im Kapitel 5 beschrieben wird..

Inkrementelle Sicherung

Für die inkrementelle Datensicherung wird die Option -g verwendet. Als Parameter erwartet diese Option den Namen der Datei, in der die zeitlichen Informationen abgelegt werden. Existiert die Zeitstempeldatei noch nicht, wird sie angelegt und eine Vollsicherung durchgeführt.

$ tar czfg dasivoll.tgz letztedasi /home

Um die Daten zu sichern, die seit der Vollsicherung verändert wurden, wird der Zeitstempel der Vollsicherung genutzt und ein neues Archiv angelegt. In diesem neuen Archiv stehen nur die Dateien, die sich seit der letzten Sicherung verändert haben. Der Befehl lautet:

$ tar czfg dasi-1.tgz letztedasi /home

Sie sehen, dass sich der Befehl, abgesehen vom Dateinamen des Archivs, nicht unterscheidet. Damit eine inkrementelle Sicherung nicht die vorige überschreibt, müssen sich die Dateinamen unterscheiden.

Der Befehl date liefert das aktuelle Datum mit Uhrzeit. Mit passenden Parametern lassen sich auch Teile des Datums verwenden. Der Paramter  +%U liefert die aktuelle Kalenderwoche, der Parameter +%F das Datum in amerikanischer Schreibweise.

Um den Datumstempel in den Dateinamen zu zaubern, wird der Befehl date mit seinen Parametern in Klammern gesetzt und mit einem Dollarzeichen verziehrt.

$ tar czfg dasi$(date +%F).tgz woche$(date +%U) /home

Dieser Befehl kann täglich, beispielsweise durch crontab, aufgerufen werden. Wenn Sie den Befehl direkt in die crontab stellen, müssen Sie darüber hinaus vor jedes Prozentzeichen einen Backslash stellen, da in einer crontab das Prozentzeichen als Zeilenumbruch interpretiert wird.

Sollte die Datensicherung nicht nur ein Verzeichnis umfassen, kann die Verwendung der Option -T hilfreich sein. Sie liest aus einer Datei die Verzeichnisse, die gesichert werden sollen. Der Dateiname dieser Sicherungsliste muss als Parameter angegeben werden:

$ tar czfgT dasi$(date +%F).tgz woche$(date +$U) liste

Die Datei liste könnte beispielsweise so aussehen:

/home/inga
/home/johanna
/home/paul
/home/georg
/var/mail

Damit würden die Benutzerverzeichnisse von inga, johanna, paul und georg und das Verzeichnis /var/mail gesichert.

Rücksicherung

Eine Rücksicherung kann nur dann ein korrektes Ergebnis liefern, wenn man zuerst die Vollsicherung zurückholt und dann so viele inkrementelle Sicherungen, bis der gewünschte Zeitpunkt erreicht ist.

Nehmen wir an, Sie haben ein Medium unter dem Verzeichnis /mnt eingehängt, auf dem sich die relevanten Sicherungen befinden. Sie wollen den Stand vom 23.11. zurückholen. Der 21.11. war ein Sonntag. Die Befehle lauten dann:

# cd /
# tar xzf /mnt/dasi2010-11-21.tgz
# tar xzf /mnt/dasi2010-11-22.tgz
# tar xzf /mnt/dasi2010-11-23.tgz

Für die Rücksicherung ist also weder der Zeitstempel noch die Sicherungsliste erforderlich, sondern nur das Archiv.

Verzeichnisse kopieren: rsync

Das Programm rsync darauf spezialisiert, Verzeichnisse möglichst effizient an einen anderen Computer über das Netzwerk zu kopieren. Die besonderen Eigenschaften von rsync:

  • Kopiert Verzeichnisse über das Netzwerk.
  • Überträgt alle Daten verschlüsselt.
  • Überträgt nur neue Daten, die am Ziel nicht schon von der letzten Sicherung vorliegen.
  • Der Zielrechner muss nicht per mount eingehängt werden. Es gibt also keine Sicherheitslücke für Verschlüsselungsviren.

Das Programm ist normalerweise bereits auf einem Linux-System installiert, kann aber auch aus dem gleichnamigen Softwarepaket explizit installiert werden:

# apt install rsync

Die Syntax des Aufrufs von rsync gibt, wie bei Linux üblich, zuerst die Quelldateien und als letztes das Zielverzeichnis an. Quelle und Ziel können einen Hostnamen enthalten, der, durch einen Doppelpunkt getrennt, vorangestellt wird. Soll das Konto eines speziellen Benutzers angesprochen werden, setzen Sie vor den Hostnamen auch noch den Benutzernamen, der durch ein @ abgetrennt wird.

$ rsync -a data user@192.168.109.199:/media/dasi

Dieser Befehl ist ganz typisch für einen rsync-Befehl zur Datensicherung. An diesem Beispiel lassen sich einige typische Merkmale aufzeigen.

  • Der Befehl kopiert das Verzeichnis data und seine Unterverzeichnisse in das Verzeichnis /media/dasi. Dort wird also ein Verzeichnis data entstehen.
  • Das Verzeichnis /media/dasi befindet sich auf dem Rechner mit der IP-Adresse 192.168.109.199. Sie könnten natürlich auch einen Hostnamen verwenden. Hostnamen oder IP-Adresse werden durch einen Doppelpunkt getrennt vor das Verzeichnis gestellt.
  • Vor dem Host kann durch ein @ getrennt der Benutzername erscheinen, sofern dieser nicht auf beiden Computern gleich ist.
  • Wird im Befehl an data ein Schrägstrich gehängt, wird das Verzeichnis selbst nicht kopiert, sondern darunter befindlichen Dateien und Verzeichnisse.
  • Die Option -a steht für eine Kombination von Optionen. Dazu gehört die Kopie aller Unterverzeichnisse und der Erhalt der Dateieigenschaften. Außerdem muss das Zielverzeichnis auf einem POSIX-Dateisystem liegen, weil auch die Besonderheiten wie Links und Gerätedateien übertragen werden.
  • Die größte Besonderheit tritt bei der Wiederholung des Befehls zutage. Die meisten Daten wurden bereits übertragen. Dies bemerkt rsync und spart sich eine weitere Übertragung. Damit geht die Sicherung sehr schnell vonstatten.

Mit der Option -v lassen sich die Dateien anzeigen, die sich geändert haben und darum kopiert werden.

Die Option -z führt dazu, dass die Dateien bei der Übertragung komprimiert werden. Am Ziel werden sie wieder auf die Originalgröße expandiert. Man muss hier die Geschwindigkeit des Netzes gegen die CPU-Belasung der Rechner abgeschätzt werden.

Mit der Option --delete können auch Dateien im Ziel entfernt werden, wenn die gleichnamigen Gegenstücke im Quellverzeichnis nicht vorhanden sind. Diese Option ist hilft, veraltete Datenbestände zu vermeiden, hat aber natürlich auf offensichtliche Risiken.

Falls Ihnen diese Optionen keinen Spaß machen, hätte ich in Tabelle 18.1 noch ein paar für Sie.

Option

Bedeutung

-a

rekursives Archivieren bei Erhaltung aller Eigenschaften

-b

Beim Überschreiben eine Version als Backup halten

-l

Symbolische Links als symbolische Links kopieren

-p

permission: Behalte die Dateieigenschaften und Rechte bei

-q

quiet: Keine unnötigen Ausgaben auf dem Bildschirm

-r

rekursiv: Nimmt alle Unterverzeichnisse mit

-t

Behalte Zeit und Datum bei

-u

update: Nur wenn keine neuere Zieldatei vorliegt

-v

verbose: Erzähl mal was von dir, rsync!

-z

Während des Kopierens komprimieren

Tabelle 18.1: Optionen von rsync

Medien kopieren: dd

Das Programm dd kopiert blockweise ganze Medien. So kann eine Festplatte mit einem Rutsch auf eine mindestens gleich große Festplatte geklont werden. Diese kann im Falle eines Falles durch einfachen Tausch die defekte Systemplatte ersetzen.

Quelle und Ziel müssen nicht unbedingt Festplatten sein. Disketten, SD-Karten, CDs oder Dateien gehen auch. Auf diese Weise kann eine SD-Karte in eine Datei geklont werden, diese per E-Mail-Anhang versandt und von dem Empfänger auf eine SD-Karte geschrieben werden.

Übrigens sind die Image-Dateien, die Sie herunterladen, um Linux zu installieren, letztlich durch dd entstanden und können mit diesem Programm auf einen USB-Stick geschoben oder mithilfe eines Brennprogramms auf eine DVD gebrannt werden.

Das Programm hat hauptsächlich zwei Optionen, die Quelle und Ziel benennen.

  • if (input file): benennt die Quelldatei oder das Quellmedium.
  • of (output file): benennt die Zieldatei oder das Zielmedium.

Aus Sicht von Linux sind Dateien und Medien weitgehend kompatibel. So gibt es für die erste Festplatte im System eine stellvertretende Gerätedatei namens /dev/sda. Weitere Festplatten, aber auch USB-Sticks werden dann mit /dev/sdb, /dev/sdc und so weiter erreicht.

Das folgende Beispiel kopiert eine SD-Karte in eine Datei und zurück. Das Beispiel geht davon aus, dass die SD-Karte über /dev/sdc erreichbar ist. Es zeigt die typische Syntax eines dd-Aufrufs.

# dd if=/dev/sdc of=sicherung.img
# dd of=/dev/sdc if=sicherung.img

Der erste Befehl kopiert die SD-Karte in eine Datei. Dabei ist es völlig egal, von welchem System die SD-Karte erzeugt wurde. Im zweiten Befehl wird die gesicherte Datei wieder auf eine SD-Karte kopiert.

Festplatte löschen

Auch wenn Sie alle Daten eines Datenträgers aus Datenschutzgründen vollständig löschen wollen, können Sie dd einsetzen:

# dd if=/dev/zero of=/dev/sdb

Dieser Befehl kopiert das Gerät /dev/zero, das, wie der Name schon ahnen lässt, lauter Nullen liefert, auf die zweite Festplatte. Der Befehl stoppt, wenn die Festplatte voll ist.

Automatisierte Datensicherung

Datensicherungen finden vorzugsweise nachts statt, wenn fleißige Administratoren schlafen. Diesen Schlaf möchten sie nicht durch das Starten der Datensicherung unterbrechen, also schieben Sie diese Aufgabe dem Server in die Schuhe.

Der Wiederholungstäter cron

Der Dienst für regelmäßig wiederkehrende Aufgaben heißt cron. Der Stundenplan, nach dem er vorgeht, heißt crontab und war ursprünglich eine einzige Datei, die im Verzeichnis /etc residierte. Inzwischen sind die Aufgaben deligiert worden und die Datei /etc/crontab steuert mehrere Verzeichnisse im Verzeichnis /etc, in denen Dateien die Aufträge enthalten:

  • cron.d
  • cron.hourly
  • cron.daily
  • cron.weekly
  • cron.monthly

Im Verzeichnis cron.d werden Dateien mit Tabellen abgelegt, die strukturiert werden, wie die klassischen crontab-Tabellen. Sie werden im folgenden Abshchnitt genauer beschrieben.

Die anderen Verzeichnisse nehmen Skripte auf, die je nach Name des Verzeichnisses in den entsprechenden Abständen aufgerufen werden.

Das Format einer crontab-Tabelle

Eine crontab-Tabelle enthält in jeder Zeile einen Eintrag über einen Programmstart, bestehend aus dem Zeitpunkt und dem Kommando. Wie so oft, ist auch in der crontab das Doppelkreuz ein Kommentarzeichen. Die ersten zwei Zeilen zeigen die Bedeutungen der Spalten.

# Minute Stunde Tag(Monat) Monat Tag(Woche) Kommando
# (0-59) (0-23) (1-31) (1-12) (1-7; 1=Mo)
0 4 * * * jedentag4uhr
0 9 1,15 * * jeden1.und15.um9
0 2 * * 1,2,3,4,5 werktagsum2

Wenn in einer Spalte ein Stern steht, ist jeder denkbare Zeitpunkt für diese Spalte möglich. Wenn Sie also bei Minute einen Stern statt der Null verwenden, würde zu jeder Minute der angegebenen Stunde das Programm durchstarten. Ansonsten geben Sie einzelne Werte an oder durch Kommata getrennte Zahlen. Die Tabelle oben bewirkt folgende Programmaufrufe:

  • Das Programm jedentag4uhr läuft um 4:00 Uhr an jedem Tag.
  • Das Programm jeden1.und15.um9 wird um 9:00 Uhr am 1. und 15. jeden Monats aufgerufen.
  • Das Programm werktagsum2 startet um 2:00 Uhr an jedem Montag, Dienstag, Mittwoch, Donnerstag und Freitag.

Wenn der Befehl in einer crontab ein Prozentzeichen enthält, müssen Sie darüber davor jeweils einen Backslash stellen, da in einer crontab das Prozentzeichen als Zeilenumbruch interpretiert wird.

Benutzertabelle

Die Anwender dürfen auch eine crontab anlegen, ohne jedes Mal den Administrator fragen zu müssen. Um eine solche anzulegen, wird der Befehl crontab -e aufgerufen. Er öffnet einen Editor und lässt den Benutzer eine Tabelle erstellen.

Will man die eigene Tabelle später anschauen, ruft man crontab -l.

Der Administrator kann auch eine crontab für einen beliebigen Benutzer erstellen. Um den Benutzer zu spezifizieren, verwendet er die Option -u gefolgt vom Benutzernamen.

Fehler-Mail an den Administrator

Insbesondere bei Servern, die nicht täglich gewartet werden, ist es wichtig, dass sie sich beizeiten melden, wenn etwas schief läuft. Wenn die automatische Datensicherung nicht funktioniert hat, wollen Sie das möglichst bald wissen. Dazu kann der Server eine Mail an die Privatadresse des Administrators senden, in der Hoffnung, dass dieser sie häufig liest.

Kommandozeilen-Mails

Mailprogramme laufen meist aus grafischen Oberflächen. Das nutzt im Fehlerfall eines Skripts wenig, weil dieses nicht in der Lage ist, die Maus zu schwingen. Zum Glück gibt es noch ein paar alte Mail-Programme, die sich von der Konsole aus so starten lassen, dass sie keine Interaktion benötigen.

  • Da ist einmal das klassische Programm mail, das Mails über den lokalen Mail-Server versenden kann.
  • Und dann gibt es noch mutt, ein Kommandozeilen-Mail-Client, der sich direkt an externe SMTP-Server wenden kann.

Nutzung eines Mail-Clients: mutt

Sie finden ein paar weitere Hinweise zu mutt in Kapitel 11. An dieser Stelle ist aber vor allem interessant, wie man mutt aus dem Skript heraus aufruft und allein durch die Übergabe von Optionen und Parametern erreichen kann, dass das Programm eine E-Mail versendet.

Der Mail-Client mutt wird zunächst aus dem Repository installiert.

# apt install mutt

  • Das Programm verwendet den Standard-Input als Mail-Inhalt. Das kann man sich zunutze machen, indem man Daten per Pipe an mutt sendet.
  • Mit der Option -F wird auf eine Datei verwiesen, die die Konfiguration von mutt enthält, also das SMTP-Konto, über das das Programm sendet und dessen Zugangsdaten.
  • Der Option -s folgt eine Zeichenkette, die als Betreff verwendet wird.

Der Befehl zum Senden einer Fehlermeldung würde innerhalb eines Skripts beispielsweise so aussehen.

echo "Kein Zielmedium vorhanden." | mutt -F /root/.muttrc \
-s "Fehler Datensicherung" -- admin@willemer.de

Damit mutt senden kann, muss das Programm ein E-Mail-Konto haben. Mit der Option -F wird auf eine Datei .muttrc verwiesen, in der genau dieses Konto beschrieben wird. Die Datei enthält Benutzerkennung und Passwort, aber auch die URL des Mail-Servers und dessen Konfiguration. Über diesen SMTP-Zugang wird die Nachricht an admin@willemer.de versandt, der sich hoffentlich sofort um das Problem kümmert.

# .muttrc
set from = “myadmin@gmx.de”
set smtp_url = “smtp://myadmin@gmx.de@mail.gmx.net:587/”
set smtp_pass = “strenggeheim”
set ssl_starttls = yes

Im Beispiel verwendet mutt als SMTP-Server eine GMX-Adresse myadmin@gmx.de, die ich frei erfunden habe. Vermutlich ist sie bereits vergeben. Ich bin aber sicher, dass Sie eine eigene Adresse erhalten, wenn Sie ganz lieb danach fragen.

mail mit Postfix

Wenn auf dem System sowieso der Mailserver Postfix läuft, weil Sie das Kapitel 11 so spannend fanden, kann dieser natürlich auch verwendet werden, um die Meldungen von root an eine Internet-Mail-Adresse zu versenden. Als Client verwenden wir mail. Das Programm wird automatisch bei der Installation von postfix mitinstalliert und wird hier als Absender den Benutzer root des Systems verwenden.

Der Aufruf im Skript lautet:

mail -s "Fehler Datensicherung" admin@willemer.de < fehler

In der Datei  fehler hat man zuvor die Fehlermeldungen gesammelt, die dann den Inhalt der Mail ausmachen.

Der Befehl mail verwendet den lokalen SMTP-Port zum Versenden seiner Nachrichten. Damit diese Information an admin@willemer.de weitergeleitet wird, muss der lokale Mail-Server in der Lage sein, Mails ins Internet zu verteilen. Die Mindestausstattung ist Postfix mit einem Smarthost. Die Konfiguration wird in Kapitel 11 beschrieben.

Veraltete Datensicherungen aufräumen

Wenn Sie täglich eine Datensicherung ausführen lassen, sammeln sich im Jahr 365 Sicherungen an. Das hält auf Dauer die stärkste Festplatte nicht aus. Darum stellt sich die Frage, wie Sie die älteren Datensicherungen loswerden.

Das folgende Skript sorgt dafür, dass bei einer Datensicherung für einen GitLab-Server alle Sicherungen gelöscht werden, die älter als eine Woche sind. Dazu wird der Befehl find verwendet, der erstens mit der Option -mtime feststellen kann, wie alt eine Datei ist und über die -exec den Löschbefehl rm aufrufen kann, um diese zu entfernen.

Dabei sollte der alte Kram nicht leichtfertig aufgegeben werden, wenn es keine aktuelle Datensicherung gibt. Auch das lässt sich mit dem Befehl find ermitteln.

# Das Skript räumt mit alten Backups auf und sollte wöchentlich per
# crontab aufgerufen werden.
cd dasi
# Pruefe, ob es ein neues Backup gibt
BACKUP=$(find . -mtime -7 -name "*backup.tar")
# Nur wenn ein aktuelles Backup existiert, loesche alle alten
if [ $BACKUP ]
then
find . -mtime +7 -name "*backup.tar" -exec rm {} \;
else
echo "Kein aktuelles Backup" | mutt -s "Backup-Rotate" -- myadmin@gmx.de
fi