86 lines
2.4 KiB
Bash
86 lines
2.4 KiB
Bash
#!/bin/bash
|
|
|
|
# IP address to ping
|
|
IP="10.10.10.6"
|
|
|
|
# Number of ping attempts
|
|
COUNT=5
|
|
|
|
# Log file
|
|
LOG_FILE="/var/log/wg_monitor.log"
|
|
|
|
# Function to log messages with timestamp
|
|
log_message() {
|
|
# Create log file if it doesn't exist and set proper permissions
|
|
if [ ! -f "$LOG_FILE" ]; then
|
|
touch "$LOG_FILE"
|
|
chmod 644 "$LOG_FILE"
|
|
fi
|
|
local message="$(date '+%Y-%m-%d %H:%M:%S') - $1"
|
|
echo "$message" >> "$LOG_FILE"
|
|
echo "$message" # Also print to console for debugging
|
|
}
|
|
|
|
# Always log script start
|
|
log_message "Script started - pinging $IP"
|
|
|
|
# Ping the IP address
|
|
echo "Executing ping command..."
|
|
ping_result=$(ping -c $COUNT -W 5 $IP 2>&1)
|
|
exit_code=$?
|
|
|
|
echo "Ping exit code: $exit_code"
|
|
echo "Ping result:"
|
|
echo "$ping_result"
|
|
|
|
# Check if ping failed completely
|
|
if [ $exit_code -eq 1 ]; then
|
|
log_message "Ping failed with exit code 1"
|
|
|
|
# Extract packet loss percentage
|
|
packet_loss=$(echo "$ping_result" | grep -o '[0-9]*% packet loss' | grep -o '[0-9]*')
|
|
|
|
echo "Packet loss: $packet_loss%"
|
|
log_message "Packet loss detected: $packet_loss%"
|
|
|
|
# If 100% packet loss, restart WireGuard
|
|
if [ "$packet_loss" = "100" ]; then
|
|
log_message "100% packet loss detected for $IP. Restarting WireGuard interface wg0..."
|
|
|
|
# Stop WireGuard interface
|
|
echo "Stopping WireGuard..."
|
|
/usr/bin/wg-quick down wg0
|
|
down_result=$?
|
|
|
|
if [ $down_result -eq 0 ]; then
|
|
log_message "WireGuard interface wg0 stopped successfully"
|
|
else
|
|
log_message "Failed to stop WireGuard interface wg0 (exit code: $down_result)"
|
|
fi
|
|
|
|
sleep 2
|
|
|
|
# Start WireGuard interface
|
|
echo "Starting WireGuard..."
|
|
/usr/bin/wg-quick up wg0
|
|
up_result=$?
|
|
|
|
if [ $up_result -eq 0 ]; then
|
|
log_message "WireGuard interface wg0 started successfully"
|
|
else
|
|
log_message "Failed to start WireGuard interface wg0 (exit code: $up_result)"
|
|
fi
|
|
else
|
|
log_message "Ping failed but not 100% packet loss ($packet_loss%)"
|
|
fi
|
|
elif [ $exit_code -eq 0 ]; then
|
|
# Ping successful
|
|
log_message "Ping to $IP successful"
|
|
echo "Ping successful"
|
|
else
|
|
log_message "Ping command failed with exit code $exit_code"
|
|
echo "Ping failed with exit code $exit_code"
|
|
fi
|
|
|
|
log_message "Script completed"
|
|
echo "Script completed" |