39 lines
1.3 KiB
Bash
39 lines
1.3 KiB
Bash
#!/bin/bash
|
|
# netbird-watchdog.sh — рестарт netbird если daemon застрял
|
|
# (Management Connected, но Relays=0 или Peers=0 при ненулевом total)
|
|
# Минимум 5 минут между рестартами чтобы не зацикливалось.
|
|
|
|
LOCK=/run/netbird-watchdog.last-restart
|
|
NOW=$(date +%s)
|
|
|
|
if [ -f "$LOCK" ]; then
|
|
LAST=$(cat "$LOCK")
|
|
if [ $((NOW - LAST)) -lt 300 ]; then
|
|
exit 0 # был рестарт менее 5 мин назад
|
|
fi
|
|
fi
|
|
|
|
STATUS=$(netbird status 2>&1) || exit 0
|
|
echo "$STATUS" | grep -q "^Management: Connected" || exit 0 # даём демону самому подняться
|
|
|
|
stuck=0
|
|
while IFS= read -r line; do
|
|
case "$line" in
|
|
Relays:*|"Peers count:"*)
|
|
cur=$(echo "$line" | awk '{print $(NF-1)}' | awk -F/ '{print $1}')
|
|
total=$(echo "$line" | awk '{print $(NF-1)}' | awk -F/ '{print $2}')
|
|
[ -z "$cur" ] || [ -z "$total" ] && continue
|
|
if [ "$total" -gt 0 ] && [ "$cur" -eq 0 ]; then
|
|
logger -t netbird-watchdog "stuck: $line — will restart"
|
|
stuck=1
|
|
fi
|
|
;;
|
|
esac
|
|
done <<< "$STATUS"
|
|
|
|
if [ "$stuck" = "1" ]; then
|
|
echo "$NOW" > "$LOCK"
|
|
systemctl restart netbird
|
|
logger -t netbird-watchdog "netbird restarted"
|
|
fi
|