Update Scripts/borg.sh
This commit is contained in:
parent
8af245fda6
commit
2e179867a2
143
Scripts/borg.sh
143
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="<Hier Repository einfügen>"
|
||||
|
||||
# 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
|
Loading…
x
Reference in New Issue
Block a user