Files
loogle-scripts/scripts/pi2-backup/dhcp-watchdog.sh

57 lines
1.7 KiB
Bash
Executable File

#!/bin/bash
# --- CONFIGURAZIONE ---
MASTER_IP="192.168.128.80"
CONFIG_FILE="/etc/pihole/pihole.toml"
LOG_FILE="/var/log/dhcp-watchdog.log"
# Funzione per il logging
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
echo "$1"
}
# Funzione ROBUSTA v2 per leggere lo stato
# Usa i campi ($1, $2) per ignorare gli spazi di indentazione
is_dhcp_active() {
val=$(awk '/^\[dhcp\]/{flag=1} flag && $1=="active" && $2=="=" {print $3; exit}' "$CONFIG_FILE")
echo "$val"
}
# Funzione per ATTIVARE (sed robusto)
enable_dhcp() {
# Cerca nel blocco [dhcp] e sostituisce mantenendo l'indentazione (\1)
sudo sed -i '/^\[dhcp\]/,/^\[/ s/^\(\s*\)active\s*=\s*false/\1active = true/' "$CONFIG_FILE"
sudo systemctl restart pihole-FTL
}
# Funzione per DISATTIVARE (sed robusto)
disable_dhcp() {
sudo sed -i '/^\[dhcp\]/,/^\[/ s/^\(\s*\)active\s*=\s*true/\1active = false/' "$CONFIG_FILE"
sudo systemctl restart pihole-FTL
}
# --- LOGICA DI CONTROLLO ---
if ping -c 3 -W 5 "$MASTER_IP" &> /dev/null; then
# MASTER VIVO
CURRENT_STATUS=$(is_dhcp_active)
if [ "$CURRENT_STATUS" == "true" ]; then
log_message "RECOVERY: Master tornato online. Disattivo DHCP Backup."
disable_dhcp
log_message "STATO: DHCP disattivato."
fi
else
# MASTER FORSE MORTO
sleep 30
if ! ping -c 3 -W 5 "$MASTER_IP" &> /dev/null; then
# CONFERMATO MORTO
CURRENT_STATUS=$(is_dhcp_active)
if [ "$CURRENT_STATUS" == "false" ]; then
log_message "EMERGENZA: Master irraggiungibile. Attivo DHCP Backup."
enable_dhcp
log_message "STATO: DHCP ATTIVO."
fi
fi
fi