====== Skripte ======
Der Backup‑Prozess wird durch zwei Skripte realisiert die im Verzeichnis //**/usr/local/bin/**// liegen. Das Skript **run_nextcloud_backup.sh** wird in regelmäßigen Intervallen vom //Cron‑Job// gestartet. Es ruft anschließend **nextcloud_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_nextcloud_backup.sh**, welches vom //Cron-Job// aufgerufen wird.
#!/bin/bash
# ============================================
# Einstellungen
# ============================================
MAIL_TO="eugen@hoeglinger.name"
MAIL_SUBJECT_SUCCESS="Nextcloud Backup erfolgreich"
MAIL_SUBJECT_FAIL="Nextcloud Backup FEHLGESCHLAGEN"
LOGFILE="/var/log/nextcloud_backup.log"
# ============================================
# Backup-Skript ausführen
# ============================================
/usr/local/bin/nextcloud_backup.sh
EXIT_CODE=$?
# ============================================
# Ergebnis prüfen und E-Mail senden
# ============================================
if [ $EXIT_CODE -eq 0 ]; then
MESSAGE="Das Nextcloud 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 Nextcloud 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 **nextcloud_backup.sh**, welches vom Skript //**run_nextcloud_backup.sh**// aufgerufen wird.
#!/bin/bash
# Verzeichnisse und Datenbank-Details
CONFIG_DIR="/var/www/nextcloud/config"
DATA_DIR="/mnt/dataSSD/nextcloud/data"
DB_NAME="nextcloud"
DB_USER="nextclouduser"
DB_PASS="pfmipLkHGKoBlE23"
BACKUP_DIR="/mnt/backupUSB/backup/nextcloud/"
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/nextcloud_config_$TIMESTAMP.tar.gz -C $CONFIG_DIR .
# Daten sichern
tar -czf $BACKUP_DIR/$TIMESTAMP/nextcloud_data_$TIMESTAMP.tar.gz -C $DATA_DIR .
# Datenbank sichern
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/$TIMESTAMP/nextcloud_db_$TIMESTAMP.sql
# Sicherung überprüfen
if [ -f $BACKUP_DIR/$TIMESTAMP/nextcloud_config_$TIMESTAMP.tar.gz ] && \
[ -f $BACKUP_DIR/$TIMESTAMP/nextcloud_data_$TIMESTAMP.tar.gz ] && \
[ -f $BACKUP_DIR/$TIMESTAMP/nextcloud_db_$TIMESTAMP.sql ]; then
echo "Sicherung erfolgreich erstellt."
else
echo "Sicherung fehlgeschlagen."
exit 1
fi
# ============================================
# Schritt 3: Integrität der Archive überprüfen
# ============================================
# Integrität der Archive überprüfen
if tar -tzf $BACKUP_DIR/$TIMESTAMP/nextcloud_config_$TIMESTAMP.tar.gz >/dev/null && \
tar -tzf $BACKUP_DIR/$TIMESTAMP/nextcloud_data_$TIMESTAMP.tar.gz >/dev/null; then
echo "Archive sind intakt."
else
echo "Archive sind beschädigt."
exit 1
fi
# Datenbank-Dump überprüfen
if grep -q "Dump completed" $BACKUP_DIR/$TIMESTAMP/nextcloud_db_$TIMESTAMP.sql; then
echo "Datenbank-Dump ist vollständig."
else
echo "Datenbank-Dump ist unvollständig."
exit 1
fi
echo "Backup abgeschlossen. Es existieren nun maximal 3 Sicherungen."
exit 0