niikn: самовосстановление обхода (netns-probe+heal+boot-self-heal на OpenWrt, watchdog LXC137) + внешний бэкап-сторож на HOSTKEY (dead-man's switch); скрипты в snippets/niikn-podkop
This commit is contained in:
45
snippets/niikn-podkop/hub-backup-watchdog.sh
Normal file
45
snippets/niikn-podkop/hub-backup-watchdog.sh
Normal file
@@ -0,0 +1,45 @@
|
||||
#!/bin/bash
|
||||
# hub-backup-watchdog.sh — ВНЕШНИЙ (truly-external) бэкап-сторож на HOSTKEY 151.241.234.241
|
||||
# (другой провайдер, чистый EU-интернет → TG напрямую). cron */5. Переживает падение дома/LXC137.
|
||||
# 1) Независимо следит за AdminVPS-хабом НИИКН 78.17.4.225 (ICMP+TCP 443/9443).
|
||||
# 2) Dead-man's switch: проверяет живость дома (git.dttb.ru). Дом недоступен → основной мониторинг
|
||||
# (LXC137) мог лечь → алертит отсюда, через независимый канал.
|
||||
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
HUB=78.17.4.225
|
||||
HOME_URL=https://git.dttb.ru/
|
||||
CHAT=1292155421
|
||||
. /root/.tg-alert.env 2>/dev/null # TOKEN=...
|
||||
S_HUB=/root/.hub-backup.hub.alert
|
||||
S_HOME=/root/.hub-backup.home.state # "fails" — гистерезис для дома
|
||||
A_HOME=/root/.hub-backup.home.alert
|
||||
send(){ [ -n "$TOKEN" ] && curl -s --max-time 20 "https://api.telegram.org/bot${TOKEN}/sendMessage" \
|
||||
--data-urlencode "chat_id=$CHAT" --data-urlencode "text=$1" >/dev/null 2>&1; }
|
||||
tcp(){ timeout 5 bash -c "echo >/dev/tcp/$HUB/$1" 2>/dev/null && echo 1 || echo 0; }
|
||||
NOW=$(date +%s)
|
||||
|
||||
# 1. Независимая проверка хаба
|
||||
icmp=$(ping -c2 -W2 "$HUB" >/dev/null 2>&1 && echo 1 || echo 0)
|
||||
p443=$(tcp 443); p9443=$(tcp 9443)
|
||||
if [ "$p443" = 0 ] && [ "$p9443" = 0 ]; then
|
||||
msg="🚨 [внешний сторож HOSTKEY] VPN-хаб НИИКН ($HUB) лёг: TCP 443/9443 молчат (ICMP=$icmp). Весь обход недоступен. Проверь AdminVPS (неоплата?)."
|
||||
last=$(cat "$S_HUB" 2>/dev/null || echo 0); [ $((NOW-last)) -gt 3600 ] && { send "$msg"; echo "$NOW" > "$S_HUB"; }
|
||||
echo "ALERT: hub down"
|
||||
else
|
||||
[ -f "$S_HUB" ] && { send "✅ [внешний сторож HOSTKEY] VPN-хаб НИИКН ($HUB) снова в строю."; rm -f "$S_HUB"; }
|
||||
fi
|
||||
|
||||
# 2. Dead-man's switch: живость дома (gitea — стабильный публичный сервис dttb)
|
||||
if curl -s -o /dev/null --max-time 10 -w '%{http_code}' "$HOME_URL" 2>/dev/null | grep -qE '^(200|30.|40.)$'; then
|
||||
echo 0 > "$S_HOME"
|
||||
[ -f "$A_HOME" ] && { send "✅ [внешний сторож HOSTKEY] Дом dttb снова доступен — основной мониторинг (LXC137) жив."; rm -f "$A_HOME"; }
|
||||
else
|
||||
f=$(( $(cat "$S_HOME" 2>/dev/null || echo 0) + 1 )); echo "$f" > "$S_HOME"
|
||||
if [ "$f" -ge 2 ]; then
|
||||
msg="⚠️ [внешний сторож HOSTKEY] Дом dttb недоступен снаружи ($HOME_URL не отвечает, $f проверки подряд) — возможно лёг интернет/инфра дома, а с ним и основной сторож LXC137. Следи за хабом вручную; этот внешний сторож продолжает работать."
|
||||
last=$(cat "$A_HOME" 2>/dev/null || echo 0); [ $((NOW-last)) -gt 3600 ] && { send "$msg"; echo "$NOW" > "$A_HOME"; }
|
||||
echo "ALERT: home unreachable ($f)"
|
||||
else
|
||||
echo "home degraded $f/2"
|
||||
fi
|
||||
fi
|
||||
echo "done (hub 443=$p443 9443=$p9443 icmp=$icmp)"
|
||||
Reference in New Issue
Block a user