Перезапуск WG интерфейса если хост не доступен

Перезапускаем интрфейс wg если удаленный хост не пингается. Скрипт перезапустит интерфейс не чаще чем раз в 10 минут. Для отправки уведомлений в телеграм используется другой скрипт, посмотреть его можно тут.

Использование: /wg_restart.sh 10.1.100.2 wg1-channel
Cron: * * * * * root /srv/scripts/wg_restart.sh 10.1.100.2 wg1-channel

#!/bin/bash

# Проверка наличия аргументов
if [ "$#" -ne 2 ]; then
    echo "Использование: $0 <IP-адрес> <имя интерфейса>"
    exit 1
fi

# Получаем аргументы
HOST="$1"              # IP-адрес или доменное имя
WG_INTERFACE="$2"     # Имя интерфейса WireGuard

# Файл для хранения времени последнего перезапуска
LAST_RESTART_FILE="/tmp/last_wg_restart_$WG_INTERFACE"

# Получаем текущее время в секундах
CURRENT_TIME=$(date +%s)

# Проверяем, когда был последний перезапуск
if [ -f "$LAST_RESTART_FILE" ]; then
    LAST_RESTART=$(cat "$LAST_RESTART_FILE")
else
    LAST_RESTART=0
fi

# Проверяем, прошло ли 10 минут с последнего перезапуска
if (( CURRENT_TIME - LAST_RESTART >= 600 )); then

    # Проверка доступности хоста
    if ! ping -c 1 "$HOST" &> /dev/null; then
        # Отправляем уведомление в телегу
        echo "$HOST недоступен. Перезапуск интерфейса $WG_INTERFACE..." | /srv/scripts/send_notify.sh

        # Перезапуск интерфейса WireGuard
        wg-quick down "$WG_INTERFACE" 2> /dev/null
        wg-quick up "$WG_INTERFACE" 2> /dev/null

        # Обновляем время последнего перезапуска
        echo "$CURRENT_TIME" > "$LAST_RESTART_FILE"
    fi
fi

[ Править ]

@kiranananda