#!/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