restic-auto-backup/restic-backup

72 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
# ================================
# Restic System Backup Script
# Autor: Michael
# ================================
# Variablen
RESTIC_REPOSITORY=rclone:Cloud.Michaelis.Digital:backup-repo
RESTIC_PASSWORD_FILE=/home/ratatoskr/.restic-pass
LOGFILE=/var/log/restic-backup.log
NTFY_TOPIC=A72
NTFY_URL=https://ntfy.michaelis.digital/$NTFY_TOPIC
NTFY_USER=Michaelis
NTFY_PASS=u5ptufUFuDL6q4yEcSN3iqas5gtXNkN77Lx3cy3oX8UoSgFWdifYy9FVopv2Zwtu
# TMPDIR auf ein großes Laufwerk setzen
export TMPDIR=/var/tmp
# Backup Startzeit
START=$(date '+%Y-%m-%d %H:%M:%S')
echo "==== Backup Start: $START ====" | tee -a $LOGFILE
# Backup ausführen
echo "Starte Backup..." | tee -a $LOGFILE
BACKUP_OUTPUT=$(restic -r $RESTIC_REPOSITORY \
--password-file $RESTIC_PASSWORD_FILE \
backup / \
--exclude /proc \
--exclude /tmp \
--exclude /mnt \
--exclude /dev \
--exclude /sys \
--exclude /run \
--exclude /var/tmp \
--verbose 2>&1)
BACKUP_EXIT=$?
# Backup Endezeit und Dauer
END=$(date '+%Y-%m-%d %H:%M:%S')
START_SEC=$(date +%s)
END_SEC=$(date +%s)
DURATION=$(date -u -d @$((END_SEC-START_SEC)) +%H:%M:%S)
# Letztes Snapshot ermitteln
LATEST=$(restic -r $RESTIC_REPOSITORY --password-file $RESTIC_PASSWORD_FILE snapshots --latest 1 --json | jq -r '.[0].short_id' 2>/dev/null)
# Stats auslesen
STATS=$(restic -r $RESTIC_REPOSITORY --password-file $RESTIC_PASSWORD_FILE stats --mode blobs-per-file $LATEST 2>&1)
# Ausgabe in Log und Terminal
{
echo "$BACKUP_OUTPUT"
echo ""
echo "Backup-Dauer: $DURATION"
echo "Letzter Snapshot: $LATEST"
echo "$STATS"
echo "Exit-Code: $BACKUP_EXIT"
echo "==== Backup Ende: $END ===="
} | tee -a $LOGFILE
# NTFY Benachrichtigung
SUMMARY="Restic Backup abgeschlossen
Snapshot: $LATEST
Dauer: $DURATION
$STATS
Exit-Code: $BACKUP_EXIT
$(date)"
curl -u $NTFY_USER:$NTFY_PASS -H "Title: Restic Backup" -H "Tags: backup" -d "$SUMMARY" $NTFY_URL