Add Watchdog + Telegram alerts, Cron auf 15 Min
This commit is contained in:
parent
5aa45cca3c
commit
59f76cfe74
1 changed files with 58 additions and 3 deletions
|
|
@ -1,26 +1,81 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# homelab-brain Auto-Sync Script
|
# homelab-brain Auto-Sync Script
|
||||||
# Läuft täglich 03:00 Uhr auf pve-hetzner
|
# Läuft alle 15 Min auf pve-hetzner
|
||||||
# Aktualisiert STATE.md Dateien und pushed nach GitHub
|
# Aktualisiert STATE.md Dateien, pushed nach GitHub
|
||||||
|
# und sendet Telegram-Alerts bei Service-Ausfällen
|
||||||
#
|
#
|
||||||
# Setup (einmalig auf pve-hetzner):
|
# Setup (einmalig auf pve-hetzner):
|
||||||
# git clone https://<TOKEN>@github.com/Orbitalo/homelab-brain.git /opt/homelab-brain
|
# git clone https://<TOKEN>@github.com/Orbitalo/homelab-brain.git /opt/homelab-brain
|
||||||
# chmod +x /opt/homelab-brain/scripts/sync-state.sh
|
# chmod +x /opt/homelab-brain/scripts/sync-state.sh
|
||||||
# echo "0 3 * * * root /opt/homelab-brain/scripts/sync-state.sh >> /var/log/homelab-sync.log 2>&1" >> /etc/crontab
|
# echo "*/15 * * * * root /opt/homelab-brain/scripts/sync-state.sh >> /var/log/homelab-sync.log 2>&1" >> /etc/crontab
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
REPO="/opt/homelab-brain"
|
REPO="/opt/homelab-brain"
|
||||||
GH_TOKEN="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"
|
GH_TOKEN="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"
|
||||||
|
TG_TOKEN="8551565940:AAHIUpZND-tCNGv9yEoNPRyPt4GxEPYBJdE"
|
||||||
|
TG_CHAT="674951792"
|
||||||
|
DEBOUNCE_DIR="/tmp/homelab_watchdog"
|
||||||
DATE=$(date '+%Y-%m-%d %H:%M')
|
DATE=$(date '+%Y-%m-%d %H:%M')
|
||||||
CHANGED=0
|
CHANGED=0
|
||||||
|
|
||||||
|
mkdir -p "$DEBOUNCE_DIR"
|
||||||
log() { echo "[$(date '+%H:%M:%S')] $1"; }
|
log() { echo "[$(date '+%H:%M:%S')] $1"; }
|
||||||
|
|
||||||
|
# Telegram Alert mit Debounce (10 Min pro Alert-Typ)
|
||||||
|
tg_alert() {
|
||||||
|
local key="$1" msg="$2"
|
||||||
|
local lockfile="$DEBOUNCE_DIR/${key}.lock"
|
||||||
|
local now=$(date +%s)
|
||||||
|
if [ -f "$lockfile" ]; then
|
||||||
|
local last=$(cat "$lockfile")
|
||||||
|
if [ $((now - last)) -lt 600 ]; then
|
||||||
|
return # Debounce aktiv
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
curl -s -X POST "https://api.telegram.org/bot${TG_TOKEN}/sendMessage" \
|
||||||
|
-d "chat_id=${TG_CHAT}" \
|
||||||
|
-d "text=🚨 Homelab Watchdog%0A%0A${msg}" \
|
||||||
|
-d "parse_mode=Markdown" > /dev/null 2>&1
|
||||||
|
echo "$now" > "$lockfile"
|
||||||
|
log "Alert gesendet: $key"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Service-Watchdog: prüft ob ein CT-Service läuft
|
||||||
|
check_service() {
|
||||||
|
local ct="$1" service="$2" name="$3"
|
||||||
|
local status
|
||||||
|
status=$(pct exec "$ct" -- systemctl is-active "$service" 2>/dev/null || echo "unknown")
|
||||||
|
if [ "$status" != "active" ]; then
|
||||||
|
tg_alert "service_${service}" "⚠️ *${name}* ist DOWN%0AService: ${service}%0ACT: ${ct}%0AStatus: ${status}"
|
||||||
|
echo "DOWN"
|
||||||
|
else
|
||||||
|
# Wenn vorheriger Alert vorhanden → Recovery-Meldung
|
||||||
|
if [ -f "$DEBOUNCE_DIR/service_${service}.lock" ]; then
|
||||||
|
curl -s -X POST "https://api.telegram.org/bot${TG_TOKEN}/sendMessage" \
|
||||||
|
-d "chat_id=${TG_CHAT}" \
|
||||||
|
-d "text=✅ *${name}* wieder online" \
|
||||||
|
-d "parse_mode=Markdown" > /dev/null 2>&1
|
||||||
|
rm -f "$DEBOUNCE_DIR/service_${service}.lock"
|
||||||
|
fi
|
||||||
|
echo "active"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
cd "$REPO"
|
cd "$REPO"
|
||||||
git pull --quiet
|
git pull --quiet
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────────────
|
||||||
|
# 0. SERVICE WATCHDOG
|
||||||
|
# ─────────────────────────────────────────────────────
|
||||||
|
log "Watchdog läuft..."
|
||||||
|
RSS_LIVE=$(check_service 109 rss-manager "RSS Manager")
|
||||||
|
WP_LIVE=$(pct exec 101 -- docker inspect --format='{{.State.Status}}' wordpress-app 2>/dev/null || echo "unknown")
|
||||||
|
if [ "$WP_LIVE" != "running" ]; then
|
||||||
|
tg_alert "wordpress" "⚠️ *WordPress Docker* ist DOWN%0AStatus: ${WP_LIVE}%0ACT: 101"
|
||||||
|
fi
|
||||||
|
|
||||||
# ─────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────
|
||||||
# 1. ARAKAVA NEWS STATE
|
# 1. ARAKAVA NEWS STATE
|
||||||
# ─────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue