Сегодня в статье разберем пример написания скрипта для проверки доступности ресурса при помощи 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
[endtxt]
. . . .
- Тест скорости дисков в Linux
- Как запустить команду в фоне в Linux
- Ошибка несоответствие размеров GPT PMBR
- nginx: [warn] protocol options redefined
- Как включить поддержку linux в windows 11