This commit is contained in:
2024-12-21 14:32:50 +01:00
parent 604e89d8a8
commit bcb426a803
2 changed files with 58 additions and 18 deletions

View File

@@ -14,7 +14,7 @@ Dieses Bash-Skript sendet Benachrichtigungen basierend auf dem Ergebnis eines Du
## 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`).
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_duplicati.sh` und `shell_ntfy_duplicati.env`).
```bash
# NTFY Server
@@ -32,16 +32,15 @@ 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
# (off, normal, debug)
LOGGING=off
```
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
chmod 700 shell_ntfy_duplicati.sh
chmod 600 shell_ntfy_duplicati.env
chmod +x shell_ntfy_duplicati.sh
```
### 2. Zustände

View File

@@ -1,40 +1,77 @@
#!/bin/bash
LOG_FILE="$(dirname "$(realpath "$0")")/$(basename "$0" .sh).log" # Logdatei im gleichen Verzeichnis wie das Script
# Funktion zum Loggen
log_message() {
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
case "$LOGGING" in
"off")
# Kein Logging
;;
"normal")
# Nur normale Logs (keine Debug-Ausgaben)
echo "$timestamp - $1" >> "$LOG_FILE"
;;
"debug")
# Logs für Debug und normale Nachrichten
echo "$timestamp - [DEBUG] $1" >> "$LOG_FILE"
;;
*)
echo "Ungültiges Logging-Level: $LOGGING" >> "$LOG_FILE"
;;
esac
}
# 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
LOGGING="debug"
echo "Fehler: Konfigurationsdatei $ENV_FILE nicht gefunden."
log_message "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
log_message "##################### Script gestartet #####################"
# Alle Umgebungsvariablen ins Log schreiben, nur bei Debug-Level
if [[ "$LOGGING" == "debug" ]]; then
log_message "Umgebungsvariablen von Duplicati:"
env >> "$LOG_FILE"
fi
# Zeitstempel in die Logdatei schreiben
log_message "Duplicati Umgebungsvariable DUPLICATI__PARSED_RESULT: $DUPLICATI__PARSED_RESULT"
log_message "SEND_NOTIFICATIONS Variable aus der .env Datei: $SEND_NOTIFICATIONS"
# Umwandeln der SEND_NOTIFICATIONS in ein Array, falls es nicht bereits als Array vorliegt
SEND_NOTIFICATIONS=($SEND_NOTIFICATIONS)
# 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
log_message "Benachrichtigung wird gesendet für den Zustand: $state"
return 0
fi
done
log_message "Keine Benachrichtigung für den Zustand '$state' erforderlich."
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
@@ -82,7 +119,11 @@ if should_notify "$DUPLICATI__PARSED_RESULT"; then
"
# Log den curl-Befehl
if [[ "$LOGGING" == "debug" ]]; then
log_message "curl Befehl: $CURL_CMD"
fi
# Benachrichtigung senden
/bin/bash -c "$CURL_CMD"