Initial commit
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
shell_ntfy_duplicati.env
|
||||||
69
README.md
Normal file
69
README.md
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
# Backup Notification Script
|
||||||
|
|
||||||
|
Dieses Bash-Skript sendet Benachrichtigungen basierend auf dem Ergebnis eines Duplicati-Backups. Die Zustände, die eine Benachrichtigung auslösen, können flexibel konfiguriert werden.
|
||||||
|
|
||||||
|
## Anforderungen
|
||||||
|
- Ein ntfy-Server für das Senden von Benachrichtigungen
|
||||||
|
- Zugriff auf den Duplicati-Server
|
||||||
|
|
||||||
|
## Funktionen
|
||||||
|
- Benachrichtigungen werden über `ntfy` gesendet.
|
||||||
|
- Zustände, die Benachrichtigungen auslösen, können in der Variable `SEND_NOTIFICATIONS` festgelegt werden.
|
||||||
|
- Jeder Zustand („Success“, „Warning“, „Error“, „Fatal“) hat einen eigenen Block für spezifische Titel, Nachrichten und Prioritäten.
|
||||||
|
|
||||||
|
## Verwendung
|
||||||
|
|
||||||
|
### 1. Konfiguration
|
||||||
|
1. Platzieren Sie das Skript und eine .env-Datei im gleichen Verzeichnis. Die .env-Datei muss denselben Namen wie das Skript haben, jedoch mit der Endung `.env` (z. B. `shell_ntfy_duplicaty.sh` und `shell_ntfy_duplicaty.env`).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# NTFY Server
|
||||||
|
NTFY_URL=https://ntfy.server.net/
|
||||||
|
AUTH_TOKEN=tk_dd5geasc9844jcm3d45adio3rtchs
|
||||||
|
|
||||||
|
#Duplicati Server
|
||||||
|
DUPLICATI_URL=http://192.168.178.25:8200
|
||||||
|
SERVER_NAME=n100
|
||||||
|
ICON=http://192.168.178.25:3030/icons/n100.png
|
||||||
|
|
||||||
|
# Zustände, die Benachrichtigungen auslösen
|
||||||
|
# (Success, Warning, Error, Fatal, Unknown)
|
||||||
|
SEND_NOTIFICATIONS="Fatal Unknown"
|
||||||
|
|
||||||
|
# Optional kann bei jedem Ausführen des Scripts ein Logeintrag erstellt werden.
|
||||||
|
# Die Logdatei wird im gleichen Verzeichnis wie das Script selbst gespeichert.
|
||||||
|
# Vermerkt werden der Inhalt der $DUPLICATI__PARSED_RESULT-Variable
|
||||||
|
# und der daraus resultierende cURL-Befehl.
|
||||||
|
LOGGING=false
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Setzen Sie die korrekten Dateiberechtigungen, um die Sicherheit zu gewährleisten und das Script ausführbar zu machen:
|
||||||
|
```bash
|
||||||
|
chmod 700 shell_ntfy_duplicaty.sh
|
||||||
|
chmod 600 shell_ntfy_duplicaty.env
|
||||||
|
chmod +x shell_ntfy_duplicaty.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Zustände
|
||||||
|
Das Skript unterstützt die folgenden Zustände:
|
||||||
|
- `Success`: Das Backup war erfolgreich.
|
||||||
|
- `Warning`: Das Backup wurde abgeschlossen, aber es gab Warnungen.
|
||||||
|
- `Error`: Es gab ein Problem beim Backup.
|
||||||
|
- `Fatal`: Das Backup ist aufgrund eines schwerwiegenden Fehlers fehlgeschlagen.
|
||||||
|
- Jeder nicht erkannte Zustand wird als „Unbekannter Zustand“ behandelt.
|
||||||
|
|
||||||
|
### 3. Ausführen in Duplicati
|
||||||
|
Das Skript sollte in den Einstellungen eines Backup-Jobs unter `--run-script-after` eingetragen werden, damit es nach Abschluss des Backups automatisch ausgeführt wird.
|
||||||
|
|
||||||
|
## Aufbau des Skripts
|
||||||
|
|
||||||
|
Variable `SEND_NOTIFICATIONS`
|
||||||
|
Enthält eine Liste von Zuständen, die eine Benachrichtigung auslösen sollen.
|
||||||
|
|
||||||
|
Funktion `should_notify`
|
||||||
|
Überprüft, ob der aktuelle Zustand (`DUPLICATI__PARSED_RESULT`) in der Liste `SEND_NOTIFICATIONS` enthalten ist.
|
||||||
|
|
||||||
|
`case`-Block
|
||||||
|
Definiert Titel, Nachrichten, Prioritäten und Tags für jeden Zustand.
|
||||||
|
|
||||||
|
Abschließend wird ein `POST`-Request an den ntfy-Server gesendet.
|
||||||
91
shell_ntfy_duplicati.sh
Normal file
91
shell_ntfy_duplicati.sh
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Pfad zur .env-Datei dynamisch ermitteln
|
||||||
|
ENV_FILE="$(dirname "$(realpath "$0")")/$(basename "$0" .sh).env"
|
||||||
|
|
||||||
|
# Prüfen, ob die .env-Datei existiert
|
||||||
|
if [[ ! -f "$ENV_FILE" ]]; then
|
||||||
|
echo "Fehler: Konfigurationsdatei $ENV_FILE nicht gefunden."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# .env-Datei laden
|
||||||
|
source "$ENV_FILE"
|
||||||
|
|
||||||
|
LOG_FILE="$(dirname "$(realpath "$0")")/$(basename "$0" .sh).log" # Logdatei im gleichen Verzeichnis wie das Script
|
||||||
|
|
||||||
|
# Funktion zum Überprüfen, ob ein Zustand in der Benachrichtigungsliste enthalten ist
|
||||||
|
should_notify() {
|
||||||
|
local state=$1
|
||||||
|
for notify_state in "${SEND_NOTIFICATIONS[@]}"; do
|
||||||
|
if [[ "$state" == "$notify_state" ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Funktion zum Loggen
|
||||||
|
log_message() {
|
||||||
|
if [[ "$LOGGING" == true ]]; then
|
||||||
|
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
|
||||||
|
echo "$timestamp - $1" >> "$LOG_FILE"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Zeitstempel in die Logdatei schreiben
|
||||||
|
log_message "Script aufgerufen. DUPLICATI__PARSED_RESULT: $DUPLICATI__PARSED_RESULT"
|
||||||
|
|
||||||
|
# Überprüfen, ob Benachrichtigung gesendet werden soll
|
||||||
|
if should_notify "$DUPLICATI__PARSED_RESULT"; then
|
||||||
|
case "$DUPLICATI__PARSED_RESULT" in
|
||||||
|
"Success")
|
||||||
|
PRIORITY="default"
|
||||||
|
TAGS="heavy_check_mark"
|
||||||
|
TITLE="Backup abgeschlossen"
|
||||||
|
MESSAGE="Das Backup wurde erfolgreich abgeschlossen"
|
||||||
|
;;
|
||||||
|
"Warning")
|
||||||
|
PRIORITY="medium"
|
||||||
|
TAGS="warning"
|
||||||
|
TITLE="Backup abgeschlossen mit Warnungen"
|
||||||
|
MESSAGE="Das Backup wurde abgeschlossen, aber es gab Warnungen"
|
||||||
|
;;
|
||||||
|
"Error")
|
||||||
|
PRIORITY="high"
|
||||||
|
TAGS="x"
|
||||||
|
TITLE="Backup fehlgeschlagen"
|
||||||
|
MESSAGE="Es gab ein Problem beim Erstellen des Backups"
|
||||||
|
;;
|
||||||
|
"Fatal")
|
||||||
|
PRIORITY="urgent"
|
||||||
|
TAGS="skull"
|
||||||
|
TITLE="Schwerwiegender Fehler beim Backup"
|
||||||
|
MESSAGE="Das Backup konnte aufgrund eines schwerwiegenden Fehlers nicht abgeschlossen werden"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
PRIORITY="low"
|
||||||
|
TAGS="question"
|
||||||
|
TITLE="Unbekannter Zustand"
|
||||||
|
MESSAGE="Der Zustand des Backups ist unbekannt"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# curl Befehl vorbereiten
|
||||||
|
CURL_CMD="curl -s -X POST \"$NTFY_URL\" \
|
||||||
|
-H \"Authorization: Bearer $AUTH_TOKEN\" \
|
||||||
|
-H \"Priority: $PRIORITY\" \
|
||||||
|
-H \"Tags: $TAGS\" \
|
||||||
|
-H \"Icon: $ICON\" \
|
||||||
|
-H \"Content-Type: application/json\" \
|
||||||
|
-d '{\"topic\": \"Duplicati\", \"title\": \"$TITLE\", \"message\": \"$MESSAGE\\n\\nServer: $SERVER_NAME\\nJobname: $DUPLICATI__backup_name\\nStatus: $DUPLICATI__PARSED_RESULT\", \"click\": \"\", \"actions\": [{ \"action\": \"view\", \"label\": \"Duplicati öffnen\", \"url\": \"$DUPLICATI_URL\" }]}'
|
||||||
|
"
|
||||||
|
|
||||||
|
# Log den curl-Befehl
|
||||||
|
log_message "curl Befehl: $CURL_CMD"
|
||||||
|
|
||||||
|
# Benachrichtigung senden
|
||||||
|
/bin/bash -c "$CURL_CMD"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
Reference in New Issue
Block a user