57 lines
1.7 KiB
Bash
Executable File
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
|