Продолжение поста «Как я случайно "спас" сервер, ничего не делая»5
Итак, пришло время повторить механизм описаной байки или мифа про перезагрузку сервера с помощью CD-ROM'a. Собиралось из того, что было на коленках.
Напомню, что целью эксперимета является поддержка работоспособности "сервера" под виндой, который время от времени может зависнуть. Напротив него стоит машина с линуксом, единственной задачей которой является слежение за наличием "сервера" в сети. В случае, если "сервер" пропал из сетки, линкус должен перезагрузить его с помощью CD-ROMa
Сначала опишем методику и набор компонентов для симуляции ситуации, внизу будет видео работы всего этого процесса.
Офисный набор "сделай сам":
Потенциальная жертва с непростой судьбой, которая должна периодически крашиться да так, что по сети не будет пинговаться. Комп с Windows 11, расшарен доступ по RDP, ip-адрес: 192.168.1.57. Далее по тексту - просто Жертва
Страж для бесперебойной работы первого компа, тыкающий его в кнопку ресета с помощью DVD-ROM'a. Сорян, но настоящий CD-ROM не отыскался - их время прошло... Здесь стоит Ubuntu, выполняется скрипт, который управляет системой надзора и тыкания в ресет. Ip - 192.168.1.56, компы находятся в локалке.
Перфоратор BOSH, который дает дополнительную нагрузку и увеличивает трение для Жертвы, так как в процессе отладки выяснилось, что после тыкания приводом комп скользит по полу.
Настольная игра, несколько художественных и не очень произведений для выравнивания уровня и придания соосности тестовой системе.
Сценарий следующий: на линуксе запущен скрипт, который каждые 5 секунд пингует Жертву. Если три попытки пинга подряд уходят без ответа, выдвигается DVD-ROM, который нажимает на ресет Жертвы. Далее идет ожидание в течении минуты (даем время на перезагрузку) и все повторяется заново.
Для симуляции "выпадения из сети" Жертвы на ней через RDP выполняется батничек, содержащий такую строчку:
netsh interface set interface "Ethernet 3" admin=disable
При загрузке винды в планировщике задач выполняется соответственно
netsh interface set interface "Ethernet 3" admin=enable
На Убунте лежит скрипт
#!/bin/bash
IP_TO_PING="192.168.1.57" # IP-адрес для проверки
PING_COUNT=3 # Максимальное количество неудачных попыток
DEVICE="/dev/sr0" # DVD-ROM
CHECK_INTERVAL=5 # Пауза между попытками в секундах
# Проверки связи с Жертвой
is_reachable() {
ping -c 1 "$IP_TO_PING" &>/dev/null
return $?
}
echo "Начинаю мониторинг доступности $IP_TO_PING..."
while true; do
failure_count=0
while ! is_reachable; do
((failure_count++))
echo "$(date): Нет ответа от $IP_TO_PING. Неудач: $failure_count"
if [ "$failure_count" -ge "$PING_COUNT" ]; then
echo "$(date): Ахтунг! Делаем Hard Reset с помощью DVD-ROM'a!!!"
# Выдвигаем DVD-привод
eject "$DEVICE"
# Ждём 1 секунду
sleep 1
# Задвигаем DVD-привод обратно
eject -t "$DEVICE"
# Пауза 1 минута чтобы подождать загрузки Жертвы
echo "$(date): Ожидание 1 минуты перед новой проверкой..."
sleep 60
echo "$(date): Продолжаем наблюдение"
# Сброс счётчика попыток
failure_count=0
break
fi
sleep "$CHECK_INTERVAL"
done
if is_reachable; then
echo "$(date): узел $IP_TO_PING доступен."
fi
sleep "$CHECK_INTERVAL"
done
А вот и результат работы стендовой модели ))