#!/usr/bin/env bash # My personal script to take Borg backups # Expecting an already initialized repository # 0. Gotify-Benachrichtigung, falls Fehler err() { curl "https://gotify.dataprolet.de/message?token=XXXXXXXXXX" -F "title=Borg Backup Desktop" \ -F "message=Borg-Backup hatte einen Fehler." -F "priority=5" } # 1. Desktop-Benachrichtigung, dass das Backup startet sudo -u $user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send -t 5000 'BorgBackup' 'Backup started..' # 2. Verzeichnis für die Logdatei festlegen log="/home/$user/.borg/logs/"$(date +"%Y-%m-%d_%H:%M")".log" # 3. Adresse des Repositories festlegen repo= # Fill in your repositories address here # 4. Standard streams in Logdatei umleiten exec >> >(tee -i ${log}) exec 2>&1 # 5. Passwort für Repository exportieren export BORG_PASSCOMMAND='cat "/etc/borgpass"' # 6. Backup erstellen (niceness = 2, verbose, zeige Statistiken, Kompression = automatisch & zstd) # https://borgbackup.readthedocs.io/en/stable/usage/create.html nice -n 19 ionice -c 3 borg create -v --stats -C auto,zstd \ $repo::'{now:%Y-%m-%d_%H:%M}' \ /home/$user/Daten \ || err # 7. Desktop-Benachrichtigung, dass das Backup beendet ist sudo -u $user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send -t 5000 'BorgBackup' 'Backup finished.' # 8. Leerzeichen für die Logdatei echo # 9. Desktop-Benachrichtigung, dass das Repository bereinigt wird # https://borgbackup.readthedocs.io/en/stable/usage/prune.html sudo -u $user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send -t 5000 'BorgBackup' 'Pruning backups..' # 10. Zeitstempel für die Logdatei (Start) echo "Started pruning backups: $(date)" echo # 11. Behalte 7 tägliche, 4 wöchentliche, 6 monatliche und 1 jährliche Backup(s). # Zeitmessung für die Logdatei time borg prune --stats --list --save-space -d=5 -m=3 -y=1 $repo # 12. Leerzeile für die Logdatei echo # 13. Zeitstempel für die Logdatei (Ende) echo "Finished pruning: $(date)" # 14. Desktop-Benachrichtigung, dass die Bereinigung beendet ist sudo -u $user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send -t 5000 'BorgBackup' 'Pruning finished' # 15. Logdateien löschen, die älter sind als 30 Tage /usr/bin/find /home/$user/.borg/logs/* -mtime +30 -exec sudo -u $user env XDG_RUNTIME_DIR="/run/user/$(id -u $user)" /usr/bin/rmtrash -rf {} \;