Files
multi-watch/multi-watch.sh
pi-farm 2be56303c3
All checks were successful
Docker Build Smart Logic / Build amd64 & arm64 (push) Successful in 16s
add Dockerfile and config folder & files
2026-02-06 21:19:41 +01:00

71 lines
2.2 KiB
Bash

#!/bin/bash
CONFIG_DIR="/config"
CONFIG_FILE="$CONFIG_DIR/watchdog.conf"
STATE_FILE="$CONFIG_DIR/watch_state.json"
while true; do
# 1. Config bei jedem Durchlauf neu laden (erlaubt Änderungen ohne Neustart)
if [ -f "$CONFIG_FILE" ]; then
source "$CONFIG_FILE"
else
echo "Fehler: $CONFIG_FILE nicht gefunden! Warte 60s..."
sleep 60
continue
fi
# Standard-Intervall falls nicht definiert (1 Stunde)
INTERVAL=${CHECK_INTERVAL:-3600}
# msmtp Konfig schreiben
cat <<EOF > /etc/msmtprc
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
account default
host $SMTP_HOST
port $SMTP_PORT
from $EMAIL_FROM
user $SMTP_USER
password $SMTP_PASS
EOF
chmod 600 /etc/msmtprc
if [ ! -f "$STATE_FILE" ] || [ ! -s "$STATE_FILE" ]; then echo "{}" > "$STATE_FILE"; fi
UPDATES_FOUND=""
echo "--- Starte Check: $(date) ---"
for entry in "${TARGETS[@]}"; do
IFS="|" read -r TYPE REPO EXTRA <<< "$entry"
KEY="${TYPE}_${REPO//[\/\.]/_}_${EXTRA}"
OLD_VAL=$(jq -r ".[\"$KEY\"] // empty" "$STATE_FILE")
NEW_VAL=""
if [ "$TYPE" == "DOCKER" ]; then
NEW_VAL=$(curl -s "https://hub.docker.com/v2/repositories/${REPO}/tags/${EXTRA}" | jq -r '.last_updated // empty')
elif [ "$TYPE" == "GITHUB" ]; then
NEW_VAL=$(curl -s "https://api.github.com/repos/${REPO}/branches/${EXTRA}" | jq -r '.commit.sha // empty')
fi
if [ -z "$NEW_VAL" ] || [ "$NEW_VAL" == "null" ]; then continue; fi
if [ -n "$OLD_VAL" ] && [ "$OLD_VAL" != "$NEW_VAL" ]; then
MSG="Update für $REPO ($EXTRA)! Alt: $OLD_VAL | Neu: $NEW_VAL"
echo "🔔 $MSG"
UPDATES_FOUND="${UPDATES_FOUND}${MSG}\n"
fi
TEMP_JSON=$(jq ".[\"$KEY\"] = \"$NEW_VAL\"" "$STATE_FILE")
echo "$TEMP_JSON" > "$STATE_FILE"
done
# Mail senden
if [ -n "$UPDATES_FOUND" ]; then
echo -e "Subject: Watchdog Alert\nFrom: $EMAIL_FROM\nTo: $EMAIL_TO\n\n$UPDATES_FOUND" | msmtp "$EMAIL_TO"
fi
echo "Check beendet. Nächster Scan in $INTERVAL Sekunden."
sleep "$INTERVAL"
done