Dokumentation für ein Backup-Skript

1. Übersicht

Dieses Dokument beschreibt die Einrichtung eines automatisierten Backups auf einem Linux-Server, wobei die Backupdateien lokal erstellt und anschließend auf ein gemountetes NAS-Verzeichnis übertragen werden. Fehler und Statusmeldungen werden automatisch über einen Discord Webhook übermittelt.

2. Voraussetzungen

– Ein gemountetes NAS-Verzeichnis unter /mnt/nas-backup

– Schreibrechte auf dem NAS-Verzeichnis

– Installiertes curl für Discord-Webhook

– Regelmäßiger Aufruf über Cron oder systemd-timer (optional)

3. Backup-Skript

Das folgende Skript erstellt ein vollständiges Backup wichtiger Systemverzeichnisse und überträgt es auf das NAS.

backup.sh


#!/bin/bash

DATE=$(date +’%Y-%m-%d‘)
DEST_DIR=“/tmp/backups“
ARCHIVE_NAME=“important-backup-$DATE.tar.gz“
TEMP_DIR=“$DEST_DIR/backup-$DATE“
LOG_FILE=“/tmp/backup_$DATE.log“
MAX_BACKUPS=7

NAS_MOUNT=“/mnt/nas-backup“
WEBHOOK_URL=“https://discord.com/api/webhooks/…“

exec > >(tee -a „$LOG_FILE“) 2>&1

send_discord_message() {
  local MESSAGE=“$1″
  curl -s -H „Content-Type: application/json“ -X POST -d „{„content“: „$MESSAGE“}“ „$WEBHOOK_URL“ > /dev/null
}

send_discord_message „Backup gestartet am $DATE“

if ! mountpoint -q „$NAS_MOUNT“; then
  send_discord_message „NAS nicht gemountet unter $NAS_MOUNT. Backup abgebrochen.“
  exit 1
fi

mkdir -p „$TEMP_DIR“

cp -a /etc „$TEMP_DIR“
cp -a /home „$TEMP_DIR“
cp -a /opt „$TEMP_DIR“ 2>/dev/null
cp -a /var/www „$TEMP_DIR“ 2>/dev/null
cp -a /usr/local/bin „$TEMP_DIR“
cp -a /var/lib „$TEMP_DIR“ 2>/dev/null
cp -a /srv „$TEMP_DIR“ 2>/dev/null

cp -a /etc/systemd/system „$TEMP_DIR/systemd-system“
cp -a /lib/systemd/system „$TEMP_DIR/systemd-lib“

if command -v dpkg >/dev/null; then
  dpkg –get-selections > „$TEMP_DIR/package-list.dpkg“
elif command -v rpm >/dev/null; then
  rpm -qa > „$TEMP_DIR/package-list.rpm“
fi

mkdir -p „$DEST_DIR“
tar -czpf „$DEST_DIR/$ARCHIVE_NAME“ -C „$DEST_DIR“ „backup-$DATE“

cp „$DEST_DIR/$ARCHIVE_NAME“ „$NAS_MOUNT/“
UPLOAD_STATUS=$?

if [ $UPLOAD_STATUS -eq 0 ]; then
  send_discord_message „Backup erfolgreich abgeschlossen: $ARCHIVE_NAME“
else
  ERROR_LOG=$(tail -n 20 „$LOG_FILE“ | sed ’s/“/\“/g‘)
  send_discord_message „Backup FEHLGESCHLAGEN: $ARCHIVE_NAME
$ERROR_LOG“
  exit 1
fi

cd „$NAS_MOUNT“ || exit 1
BACKUPS=($(ls -1 important-backup-*.tar.gz 2>/dev/null | sort))
NUM_BACKUPS=${#BACKUPS[@]}

if [ „$NUM_BACKUPS“ -gt „$MAX_BACKUPS“ ]; then
  NUM_TO_DELETE=$((NUM_BACKUPS – MAX_BACKUPS))
  for ((i=0; i<$NUM_TO_DELETE; i++)); do
    rm -f „$NAS_MOUNT/${BACKUPS[$i]}“
  done
fi

rm -rf „$TEMP_DIR“
rm -f „$DEST_DIR/$ARCHIVE_NAME“
rm -f „$LOG_FILE“

1 Kommentar zu „Dokumentation für ein Backup-Skript“

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen