Скрипт BASH проверяющий доступность сайта/ip-адреса.

Сегодня в статье разберем пример написания скрипта для проверки доступности ресурса при помощи BASH в Linux. Может кому то будет полезен :).
И так поехали:
Скрипт доступности ресурса
- Создадим текстовый файл ping_test.sh со следующим содержанием:
sudo nano ~/ping_test.sh
#!/bin/bash
PATH=/bin:/bin/bash:/usr/bin:/sbin:/usr/sbin
IP=("10.5.5.1") # тут либо ip, либо FQDN вашего домена
for g in ${IP[@]}; do
result=$(ping -c 2 -W 1 -q $g | grep transmitted)
pattern="0 received";
if [[ $result =~ $pattern ]]; then
while [[ $result =~ $pattern ]]
do
result=$(ping -c 2 -W 1 -q $g | grep transmitted)
echo "$result"
done
else
echo "$g is up"
fi
done
Скрипт будет проверять доступность ресурса при помощи команды ping до тех пор пока данный ресурс не выйдет на связь. Для автоматизации давайте запишем задание в crontab. Задание будет срабатывать при перезагрузке системы.
@reboot /bin/bash /sbin/ping_test.sh
Также если вам необходимо чтобы еще отправлялось уведомление на почту, то скрипт примет такой вид:
#!/bin/bash
PATH=/bin:/bin/bash:/usr/bin:/sbin:/usr/sbin
IP=("10.5.5.1")
for g in ${IP[@]}; do
result=$(ping -c 2 -W 1 -q $g | grep transmitted)
pattern="0 received";
if [[ $result =~ $pattern ]]; then
while [[ $result =~ $pattern ]]
do
result=$(ping -c 2 -W 1 -q $g | grep transmitted)
#отправим уведомление на почту
sendmail -f "кому@yandex.ru" -t "от_кого@yandex.ru" -u "Проблема с доступностью сервера" -m "Сообщение от $(hostname) . $ADDR недоступен с $(date)" -xu "логин" -xp "пароль" -s "smtp.yandex.ru" -o "message-charset=utf-8"
notify-send "Статус сервера $IP" "Offline, сообщение направлено на почту"
done
else
echo "$g is up"
fi
done
fi
- IP=”10.5.5.1″ – IP-адрес для мониторинга. Через пробел можно указать несколько адресов.
- ping -c 2 -W 1 – количество пакетов посылаемых на сервер
- -f “кому@yandex.ru” – указываю свою почту
- -t “от_кого@yandex.ru” – указываем почту от которой будем отправлять.
- -u “Проблема с доступностью сервера” – тема сообщения
- -m “Сообщение от $(hostname) . $ADDR недоступен с $(date)” – Содержание сообщения
- -xu “логин” – Логин от вашей почты
- -xp “пароль” – Пароль от вашей почты
- -s “smtp.yandex.ru” – Адрес smtp сервера отправки почты, в моем случае это yandex
- -o “message-charset=utf-8” – Кодировка сообщения, без нее будет крякозябры.
- Даем права на исполнение
chmod +x ping_test.sh
Для того чтобы сработала отправка почты нужно установить пакет sendmail
sudo apt install sendmail
- Радуемся, через заданный промежуток времени в событии будет высвечено сообщение о статусе.
Скрипт доступности ресурса каждые 10 секунд
Запускать задание через каждых 10 секунд:
#!/bin/bash
PATH=/bin:/bin/bash:/usr/bin:/sbin:/usr/sbin
IP=("10.5.5.1")
while :;do
for g in ${IP[@]}; do
result=$(ping -c 2 -W 1 -q $g | grep transmitted)
pattern="0 received";
if [[ $result =~ $pattern ]]; then
while [[ $result =~ $pattern ]]
do
result=$(ping -c 2 -W 1 -q $g | grep transmitted)
echo "$result"
done
else
echo "$g is up"
fi
done
sleep 10
done
Если есть вопросы, то пишем в комментариях.
Также можете вступить в Телеграм канал, ВКонтакте или подписаться на Twitter. Ссылки в шапке страницы.
Заранее всем спасибо!!!
RSS
- Как запустить команду в фоне в Linux
- Ошибка несоответствие размеров GPT PMBR
- nginx: [warn] protocol options redefined
- Как включить поддержку linux в windows 11
- Запускаем скрипт после запуска сети Ubuntu 22.04
Не отрабатывает, если ping возвращает другое сообщение, например “connect: Network is unreachable”.
Значит у вас не подключен кабель. Или нет интернета на ПК