#!/bin/bash # Log file log_file="/var/log/watchdog.log" # Configuration file config_file="/etc/watchdog.conf" # Function to update watchdog configuration update_watchdog_config() { # Extract watchdog IP addresses watchdog=$(sudo cat /var/lib/dhcp/* | grep -a "option watchdog" | tail -1 | \ awk '{for (i=3; i<=NF; i++) printf "%s ", $i}' | tr -d '";') # Split the watchdog IPs into an array IFS=',' read -r -a ip_array <<< "$watchdog" # Backup current configuration if sudo cp "$config_file" "$config_file.bak"; then echo "Backup of $config_file created successfully." >> "$log_file" else echo "Failed to create backup of $config_file." >> "$log_file" fi # Clean existing configurations sudo sed -i '/ping/d' "$config_file" sudo sed -i '/^interval/d' "$config_file" # Set interval echo "interval = 58" | sudo tee -a "$config_file" > /dev/null # Check if IP addresses are found and add them to the config if [ ${#ip_array[@]} -gt 0 ]; then for ip in "${ip_array[@]}"; do echo "ping = $ip" | sudo tee -a "$config_file" > /dev/null echo "Configured watchdog to ping: $ip" >> "$log_file" done # Restart watchdog service since IP addresses were found if sudo systemctl restart watchdog; then echo "Watchdog service restarted successfully." >> "$log_file" else echo "Failed to restart watchdog service." >> "$log_file" fi return 1 # Indicate that IP addresses were found fi echo "No IP addresses found. Watchdog configuration cleared." >> "$log_file" return 0 # Indicate that no IP addresses were found } # Main loop start_time=$(date +%s) end_time=$((start_time + 300)) # 5 minutes in seconds interval=30 # Initial interval of 30 seconds while true; do if ! update_watchdog_config; then echo "No IP addresses found. Waiting for $interval seconds before checking again..." >> "$log_file" else echo "IP addresses found and watchdog restarted. Exiting loop." >> "$log_file" break # Exit the loop if IP addresses were found fi current_time=$(date +%s) # Check if 5 minutes have passed if [ "$current_time" -ge "$end_time" ]; then echo "5 minutes have passed. Stopping the watchdog service." >> "$log_file" sudo systemctl stop watchdog break # Exit the loop fi echo "Waiting for $interval seconds before checking for IP addresses again..." >> "$log_file" sleep $interval done # Version 1.4: # Created 2024 by Tim Eertmoed @ WiS IT-Solutions GmbH, Germany to work on Raspian as custom PXE init script.