diff --git a/Scripts/borg.sh b/Scripts/borg.sh index fc4c6f6..b1879f8 100644 --- a/Scripts/borg.sh +++ b/Scripts/borg.sh @@ -1,89 +1,104 @@ #!/usr/bin/env bash -set -eou pipefail +#set -eou pipefail set -x # Definiere Funktion run_borgbackup () { - # Error-Funktion mit Gotify-Benachrichtigung - notify-error () { - sh ~/.scripts/gotify.sh "Borg Backup Desktop" "Borg-Backup hatte einen Fehler." - } + # Error-Funktion mit Gotify-Benachrichtigung + notify-error () { + sh /home/arne/.scripts/gotify.sh "Borg Backup Desktop" "Borg-Backup hatte einen Fehler." + } - # Erstelle Lock-File - # https://www.putorius.net/lock-files-bash-scripts.html - exec 100>"/home/arne/.borg/borg.lock" || exit 1 - flock -n 100 || exit 1 - trap 'rm -f /home/arne/.borg/borg.lock' EXIT + # Erstelle Lock-File + # https://www.putorius.net/lock-files-bash-scripts.html + exec 100>"/home/arne/.borg/borg.lock" || exit 1 + flock -n 100 || exit 1 + trap 'rm -f /home/arne/.borg/borg.lock' EXIT - # Desktop-Benachrichtigung, dass das Backup startet - sudo -u arne DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \ - notify-send -t 5000 'BorgBackup' 'Backup started..' && \ - sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 \ - paplay /usr/share/sounds/ocean/stereo/dialog-information.oga + # Desktop-Benachrichtigung, dass das Backup startet + sudo -u arne DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \ + notify-send -t 5000 'BorgBackup' 'Backup started..' && \ + sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 \ + paplay /usr/share/sounds/ocean/stereo/dialog-information.oga - # Verzeichnis für die Logdatei festlegen - log="/home/arne/.borg/logs/$(date +%Y-%m-%d_%H:%M).log" + # Verzeichnis für die Logdatei festlegen + log="/home/arne/.borg/logs/$(date +%Y-%m-%d_%H:%M).log" - # Adresse des Repositories festlegen - repo="" # Hier Repository einfügen + # Adresse des Repositories festlegen + repo="" - # Standard streams in Logdatei umleiten - exec >> >(tee -i "${log}") - exec 2>&1 + # Standard streams in Logdatei umleiten + exec >> >(tee -i "${log}") + exec 2>&1 - # Passwort für Repository exportieren - export BORG_PASSCOMMAND='cat "/etc/borgpass"' + # Passwort für Repository exportieren + export BORG_PASSCOMMAND='cat "/etc/borgpass"' - # 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/arne/Daten/Bilder \ - /home/arne/Daten/Backups \ - /home/arne/Daten/Dokumente \ - /home/arne/Daten/Videos \ - /home/arne/Daten/VMs \ - || notify-error + # Backup erstellen (niceness = 2, verbose, zeige Statistiken, Kompression = automatisch & zstd) + # https://borgbackup.readthedocs.io/en/stable/usage/create.html + if nice -n 19 ionice -c 3 borg create -v --stats -C auto,zstd \ + ${repo}::'{now:%Y-%m-%d_%H:%M}' \ + /home/arne/Daten/Bilder \ + /home/arne/Daten/Backups \ + /home/arne/Daten/Dokumente \ + /home/arne/Daten/Videos \ + /home/arne/Daten/VMs; then - # Desktop-Benachrichtigung, dass das Backup beendet ist - sudo -u arne DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \ - notify-send -t 5000 'BorgBackup' 'Backup finished. Start Pruning..' + # Desktop-Benachrichtigung, dass das Backup beendet ist + sudo -u arne DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \ + notify-send -t 5000 'BorgBackup' 'Backup finished. Start Pruning..' + # Zeitstempel für die Logdatei (Start) + echo && echo "Started pruning backups: $(date)" && echo - # Zeitstempel für die Logdatei (Start) - echo - echo "Started pruning backups: $(date)" - echo + # Behalte 5 tägliche, 3 monatliche und 2 jährliche Backup(s). + # https://borgbackup.readthedocs.io/en/stable/usage/prune.html + # Zeitmessung für die Logdatei + if time borg prune --stats --list --save-space -d=5 -m=3 -y=2 ${repo}; then - # Behalte 7 tägliche, 4 wöchentliche, 6 monatliche und 1 jährliche Backup(s). - # https://borgbackup.readthedocs.io/en/stable/usage/prune.html - # Zeitmessung für die Logdatei - time borg prune --stats --list --save-space -d=5 -m=3 -y=2 ${repo} + # Zeitstempel für die Logdatei (Ende) + echo && echo "Finished pruning: $(date)" - # Zeitstempel für die Logdatei (Ende) - echo - echo "Finished pruning: $(date)" + # Desktop-Benachrichtigung, dass die Bereinigung beendet ist + sudo -u arne DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \ + notify-send -t 5000 'BorgBackup' 'Pruning finished.' - # Desktop-Benachrichtigung, dass die Bereinigung beendet ist - sudo -u arne DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \ - notify-send -t 5000 'BorgBackup' 'Pruning finished.' + # Logdateien löschen, die älter sind als 30 Tage + command -v rmtrash >/dev/null || echo "rmtrash ist nicht installiert." + /usr/bin/find /home/arne/.borg/logs/* -mtime +30 -exec sudo -u arne env XDG_RUNTIME_DIR="/run/user/$(id -u arne)" \ + /usr/bin/rmtrash -rf {} \; - # Logdateien löschen, die älter sind als 30 Tage - command -v rmtrash >/dev/null || echo "rmtrash ist nicht installiert." - /usr/bin/find /home/arne/.borg/logs/* -mtime +30 -exec sudo -u arne env XDG_RUNTIME_DIR="/run/user/$(id -u arne)" \ - /usr/bin/rmtrash -rf {} \; + # Lösche alte temporäre Datei (Wozu nochmal?) + #find /home/arne/.borg/ -maxdepth 1 -type f ! -name "*.lock" ! -name "*.sh" ! -name "*last-run-$(date +%Y-%m-%d)*" -exec rm {} + - # Lege temporäre Datei an, damit Borg nur einmal täglich läuft - touch "/home/arne/.borg/last-run-$(date +%Y-%m-%d)" + # Lege temporäre Datei an, damit Borg nur einmal täglich läuft + touch "/home/arne/.borg/last-run-$(date +%Y-%m-%d)" + else + notify-error && exit 1 + fi + else + notify-error && exit 1 + fi } -if ! [[ -f "/home/arne/.borg/borg.lock" ]] || \ # Prüfe Lockfile - ! [[ -f "/home/arne/.borg/last-run-$(date +%Y-%m-%d)" ]] || \ # Prüfe, ob heute schon lief - ! pgrep -x "cs2" > /dev/null || \ # Prüfe, ob CS2 läuft - ! [[ "$EUID" -ne 0 ]]; then # Prüfe, ob als root gestartet - # Führe Funktion aus und verhindere Ruhezustand etc. - # https://www.freedesktop.org/software/systemd/man/latest/systemd-inhibit.html - systemd-inhibit bash -c "$(declare -f run_borgbackup); run_borgbackup" +if [[ -f "/home/arne/.borg/borg.lock" ]]; then + echo "Backup läuft gerade! Beende.." + exit 0 +elif [[ -f "/home/arne/.borg/last-run-$(date +%Y-%m-%d)" ]]; then + echo "Backup lief heute schon. Beende.." + exit 0 +elif pgrep -x "cs2" > /dev/null; then + echo "CS läuft gerade. Beende" + exit 0 +elif [[ "$EUID" -ne 0 ]]; then + echo "Skript muss als root laufen. Beende.." + exit 0 fi + +# Führe Funktion aus und verhindere Ruhezustand etc. +# https://www.freedesktop.org/software/systemd/man/latest/systemd-inhibit.html +if systemd-inhibit bash -c "$(declare -f run_borgbackup); run_borgbackup"; then + sh /home/arne/.scripts/gotify.sh "Borg Backup Desktop" "Backup erfolgreich fertig gestellt.." +fi \ No newline at end of file