42 lines
968 B
Bash
42 lines
968 B
Bash
#!/bin/bash
|
|
# Internet Watchdog - Reboots if internet is unreachable for 5 minutes
|
|
LOG_FILE="/var/log/internet-watchdog.log"
|
|
FAIL_COUNT=0
|
|
MAX_FAILS=5
|
|
CHECK_INTERVAL=60
|
|
|
|
log() {
|
|
echo "$(date "+%Y-%m-%d %H:%M:%S") - $1" >> "$LOG_FILE"
|
|
}
|
|
|
|
check_internet() {
|
|
for endpoint in 1.1.1.1 8.8.8.8 208.67.222.222; do
|
|
if ping -c 1 -W 5 "$endpoint" > /dev/null 2>&1; then
|
|
return 0
|
|
fi
|
|
done
|
|
return 1
|
|
}
|
|
|
|
log "Watchdog started"
|
|
|
|
while true; do
|
|
if check_internet; then
|
|
if [ $FAIL_COUNT -gt 0 ]; then
|
|
log "Internet restored after $FAIL_COUNT failures"
|
|
fi
|
|
FAIL_COUNT=0
|
|
else
|
|
FAIL_COUNT=$((FAIL_COUNT + 1))
|
|
log "Internet check failed ($FAIL_COUNT/$MAX_FAILS)"
|
|
|
|
if [ $FAIL_COUNT -ge $MAX_FAILS ]; then
|
|
log "CRITICAL: $MAX_FAILS consecutive failures - REBOOTING"
|
|
sync
|
|
sleep 2
|
|
reboot
|
|
fi
|
|
fi
|
|
sleep $CHECK_INTERVAL
|
|
done
|