Skripte

Der Backup‑Prozess wird durch zwei Skripte realisiert die im Verzeichnis /usr/local/bin/ liegen. Das Skript run_dokuwiki_backup.sh wird in regelmäßigen Intervallen vom Cron‑Job gestartet. Es ruft anschließend dokuwiki_backup.sh mit den erforderlichen Parametern auf und erhält von diesem eine Rückmeldung über Erfolg oder Fehlschlag des Backups. Diese Statusmeldung wird anschließend per E‑Mail an eugen@hoeglinger.name weitergeleitet.

Das Skript run_dokuwiki_backup.sh, welches vom Cron-Job aufgerufen wird.

#!/bin/bash
 
# ============================================
# Einstellungen
# ============================================
MAIL_TO="eugen@hoeglinger.name"
MAIL_SUBJECT_SUCCESS="DokuWiki Backup erfolgreich"
MAIL_SUBJECT_FAIL="DokuWiki Backup FEHLGESCHLAGEN"
LOGFILE="/var/log/dokuwiki_backup.log"
 
# ============================================
# Backup-Skript ausführen
# ============================================
/usr/local/bin/dokuwiki_backup.sh
EXIT_CODE=$?
 
# ============================================
# Ergebnis prüfen und E-Mail senden
# ============================================
if [ $EXIT_CODE -eq 0 ]; then
    MESSAGE="Das DokuWiki Backup wurde erfolgreich abgeschlossen.
 
Zeit: $(date)
Exit-Code: $EXIT_CODE
 
Details siehe Logfile: $LOGFILE
"
    echo "$MESSAGE" | mail -s "$MAIL_SUBJECT_SUCCESS" "$MAIL_TO"
    echo "$(date) - Backup erfolgreich." >> "$LOGFILE"
else
    MESSAGE="Das DokuWiki Backup ist FEHLGESCHLAGEN.
 
Zeit: $(date)
Exit-Code: $EXIT_CODE
 
Bitte überprüfe das Backup-Skript und die Systemlogs.
Details siehe Logfile: $LOGFILE
"
    echo "$MESSAGE" | mail -s "$MAIL_SUBJECT_FAIL" "$MAIL_TO"
    echo "$(date) - Backup FEHLGESCHLAGEN mit Exit-Code $EXIT_CODE." >> "$LOGFILE"
fi
 
exit $EXIT_CODE

Das Skript dokuwiki_backup.sh, welches vom Skript run_dokuwiki_backup.sh aufgerufen wird.

#!/bin/bash
 
# Verzeichnisse und Datenbank-Details
CONFIG_DIR="/var/www/dokuwiki/conf"
DATA_DIR="/mnt/dataSSD/dokuwiki/data"
BACKUP_DIR="/mnt/backupUSB/backup/dokuwiki/"
MOUNT_POINT="/mnt/backupUSB"
 
# ============================================
# Schritt 0: Prüfen, ob Backup-Medium gemountet ist
# ============================================
 
if ! mountpoint -q "$MOUNT_POINT"; then
    echo "FEHLER: Backup-Medium ist NICHT gemountet: $MOUNT_POINT"
    exit 2
fi
 
# ============================================
# Schritt 1: Prüfen, ob bereits 3 Sicherungen existieren
# ============================================
 
BACKUPS=($(ls -1 "$BACKUP_DIR" | sort))
COUNT=${#BACKUPS[@]}
 
if [ "$COUNT" -ge 3 ]; then
    OLDEST="${BACKUPS[0]}"
    echo "Es existieren bereits 3 Sicherungen. Lösche älteste: $OLDEST"
    rm -rf "$BACKUP_DIR/$OLDEST"
fi
 
# ============================================
# Schritt 2: Neue Sicherung erstellen
# ============================================
 
# Datum und Zeit für die Sicherung
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
 
# Sicherungsverzeichnisse erstellen
mkdir -p "$BACKUP_DIR/$TIMESTAMP"
 
# Konfiguration sichern
tar -czf "$BACKUP_DIR/$TIMESTAMP/dokuwiki_config_$TIMESTAMP.tar.gz" -C "$CONFIG_DIR" .
 
# Daten sichern
tar -czf "$BACKUP_DIR/$TIMESTAMP/dokuwiki_data_$TIMESTAMP.tar.gz" -C "$DATA_DIR" .
 
# Sicherung überprüfen
if [ -f "$BACKUP_DIR/$TIMESTAMP/dokuwiki_config_$TIMESTAMP.tar.gz" ] && \
   [ -f "$BACKUP_DIR/$TIMESTAMP/dokuwiki_data_$TIMESTAMP.tar.gz" ]; then
    echo "Sicherung erfolgreich erstellt."
else
    echo "Sicherung fehlgeschlagen."
    exit 1
fi
 
# ============================================
# Schritt 3: Integrität der Archive überprüfen
# ============================================
 
echo "Prüfe Integrität der Archive..."
 
if tar -tzf "$BACKUP_DIR/$TIMESTAMP/dokuwiki_config_$TIMESTAMP.tar.gz" >/dev/null && \
   tar -tzf "$BACKUP_DIR/$TIMESTAMP/dokuwiki_data_$TIMESTAMP.tar.gz" >/dev/null; then
    echo "Archive sind intakt."
else
    echo "FEHLER: Archive sind beschädigt."
    exit 1
fi
 
echo "Backup abgeschlossen. Es existieren nun maximal 3 Sicherungen."
 
exit 0