ubuntu:backup
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| ubuntu:backup [2026/04/12 10:46] – [Rsnapshot-Tagessicherung mit Überwachung und Fehlermail] franz | ubuntu:backup [2026/04/12 10:52] (aktuell) – [Skript anlegen] franz | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== Backup ====== | ====== Backup ====== | ||
| - | ===== | + | ===== Rsnapshot ===== |
| ist ein einfach zu bedienendes Backupprogramm. [[https:// | ist ein einfach zu bedienendes Backupprogramm. [[https:// | ||
| Zeile 139: | Zeile 139: | ||
| </ | </ | ||
| + | |||
| + | ===== rsnapshot-Tagessicherung mit Überwachung und Fehlermail ===== | ||
| + | |||
| + | ==== Ziel ==== | ||
| + | |||
| + | Die tägliche '' | ||
| + | Wenn die Sicherung fehlschlägt oder bereits ein Sicherungslauf aktiv ist, soll automatisch eine E-Mail an '' | ||
| + | |||
| + | Die Lösung verwendet ein Shell-Skript mit: | ||
| + | |||
| + | * Start der Tagessicherung\\ | ||
| + | * Protokollierung in eine Logdatei\\ | ||
| + | * Fehlererkennung über den Rückgabecode\\ | ||
| + | * Mailversand im Fehlerfall\\ | ||
| + | * Sperre gegen Doppelstarts mit '' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Wichtiger Hinweis ==== | ||
| + | |||
| + | Die Tagessicherung ist bereits im Skript integriert.\\ | ||
| + | Es ist **kein zusätzlicher Cronjob für '' | ||
| + | |||
| + | Das Skript enthält den eigentlichen Sicherungsaufruf: | ||
| + | |||
| + | <code bash> | ||
| + | usr/ | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | Es genügt daher **ein einziger Cronjob**, der nur das Überwachungsskript startet. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | ==== Warum '' | ||
| + | |||
| + | Mit '' | ||
| + | |||
| + | Vorteile: | ||
| + | |||
| + | * keine Doppelstarts\\ | ||
| + | * saubere Sperrlogik\\ | ||
| + | * robust unter Ubuntu\\ | ||
| + | * besser als einfache selbst gebaute PID-/ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Skript anlegen ==== | ||
| + | |||
| + | Datei erstellen: | ||
| + | |||
| + | <code bash> | ||
| + | sudo nano / | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | Inhalt: | ||
| + | |||
| + | <code bash> | ||
| + | #!/bin/bash | ||
| + | |||
| + | set -u | ||
| + | |||
| + | LOGFILE="/ | ||
| + | MAILTO=" | ||
| + | HOSTNAME=" | ||
| + | LOCKFILE="/ | ||
| + | |||
| + | send_error_mail() {\ | ||
| + | local subject=" | ||
| + | local body=" | ||
| + | |||
| + | / | ||
| + | Subject: $subject\ | ||
| + | From: root@$HOSTNAME\ | ||
| + | To: $MAILTO | ||
| + | |||
| + | $body\ | ||
| + | EOF\ | ||
| + | } | ||
| + | |||
| + | {\ | ||
| + | flock -n 9 || {\ | ||
| + | DATE_NOW=" | ||
| + | echo "==== $DATE_NOW LOCK AKTIV: rsnapshot daily laeuft bereits ====">> | ||
| + | send_error_mail \ | ||
| + | " | ||
| + | "Der rsnapshot-Job wurde nicht gestartet, weil bereits ein Lauf aktiv ist. | ||
| + | |||
| + | Host: $HOSTNAME\ | ||
| + | Zeit: $DATE_NOW\ | ||
| + | Lockdatei: $LOCKFILE\ | ||
| + | Logdatei: $LOGFILE" | ||
| + | exit 1\ | ||
| + | } | ||
| + | |||
| + | DATE_NOW=" | ||
| + | echo "==== Start rsnapshot daily: $DATE_NOW ====">> | ||
| + | |||
| + | / | ||
| + | RETVAL=$? | ||
| + | |||
| + | DATE_END=" | ||
| + | |||
| + | if [ $RETVAL -eq 0 ]; then\ | ||
| + | echo "==== Ende rsnapshot daily erfolgreich: | ||
| + | else\ | ||
| + | echo "==== Ende rsnapshot daily FEHLER ($RETVAL): $DATE_END ====">> | ||
| + | send_error_mail \ | ||
| + | " | ||
| + | "Die rsnapshot-Sicherung ist fehlgeschlagen. | ||
| + | |||
| + | Host: $HOSTNAME\ | ||
| + | Zeit: $DATE_END\ | ||
| + | Rueckgabecode: | ||
| + | Logdatei: $LOGFILE | ||
| + | |||
| + | Die letzten 50 Zeilen aus dem Log: | ||
| + | |||
| + | $(tail -n 50 " | ||
| + | fi | ||
| + | |||
| + | exit $RETVAL\ | ||
| + | } 9>" | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | ==== Skript ausführbar machen ==== | ||
| + | |||
| + | <code bash> | ||
| + | sudo chmod +x / | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | ==== Cronjob einrichten ==== | ||
| + | |||
| + | Root-Crontab bearbeiten: | ||
| + | |||
| + | <code bash> | ||
| + | sudo crontab -e | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | Eintrag hinzufügen: | ||
| + | |||
| + | < | ||
| + | 0 1 * * * / | ||
| + | |||
| + | </ | ||
| + | |||
| + | Damit wird jeden Tag um 01:00 Uhr: | ||
| + | |||
| + | * das Skript gestartet\\ | ||
| + | * die Tagessicherung ausgeführt\\ | ||
| + | * das Ergebnis protokolliert\\ | ||
| + | * im Fehlerfall eine Mail versendet | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | ==== Wichtige Regel ==== | ||
| + | |||
| + | Ein alter direkter Cronjob mit '' | ||
| + | |||
| + | Also **nicht beides gleichzeitig**: | ||
| + | < | ||
| + | 0 1 * * * / | ||
| + | 0 1 * * * / | ||
| + | |||
| + | </ | ||
| + | |||
| + | Richtig ist nur: | ||
| + | |||
| + | < | ||
| + | 0 1 * * * / | ||
| + | |||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | ==== Funktion testen ==== | ||
| + | |||
| + | Skript manuell starten: | ||
| + | |||
| + | <code bash> | ||
| + | sudo / | ||
| + | echo $? | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | Bedeutung: | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Logdatei ansehen: | ||
| + | |||
| + | <code bash> | ||
| + | sudo tail -n 50 / | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | ==== rsnapshot separat prüfen ==== | ||
| + | |||
| + | Falls das Skript Fehler liefert, zuerst '' | ||
| + | |||
| + | Konfiguration prüfen: | ||
| + | |||
| + | <code bash> | ||
| + | sudo / | ||
| + | echo $? | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | Tagessicherung direkt starten: sudo/ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | ==== Mailversand testen ==== | ||
| + | |||
| + | Testmail senden: | ||
| + | |||
| + | <code bash> | ||
| + | echo -e " | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | Wenn die Mail ankommt, funktioniert der Versand über '' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | ==== Logdatei ==== | ||
| + | |||
| + | Die Logdatei ist: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | |||
| + | </ | ||
| + | |||
| + | Dort stehen unter anderem: | ||
| + | |||
| + | * Startzeit des Sicherungslaufs\\ | ||
| + | * Ende des Sicherungslaufs\\ | ||
| + | * Erfolg oder Fehler\\ | ||
| + | * eventuelle Fehlermeldungen von '' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | ==== Typische Fehlerquellen ==== | ||
| + | |||
| + | * Fehler in ''/ | ||
| + | * Zielverzeichnis nicht erreichbar\\ | ||
| + | * fehlende Berechtigungen\\ | ||
| + | * zu wenig Speicherplatz\\ | ||
| + | * SSH-Probleme bei entfernten Sicherungszielen\\ | ||
| + | * fehlerhafte Mail-Konfiguration\\ | ||
| + | * bereits laufender zweiter Sicherungsjob | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Zusammenfassung ==== | ||
| + | |||
| + | Diese Lösung kombiniert: | ||
| + | |||
| + | * Tagessicherung\\ | ||
| + | * Überwachung\\ | ||
| + | * Logging\\ | ||
| + | * Fehlermail\\ | ||
| + | * Schutz vor Doppelstarts | ||
| + | |||
| + | in **einem einzigen Skript**. | ||
| + | |||
| + | Daher reicht **ein einziger Cronjob** völlig aus. | ||
ubuntu/backup.1775983580.txt.gz · Zuletzt geändert: von franz