Сегодня в статье разберем пример написания скрипта для проверки доступности ресурса при помощи BASH в Linux. Может кому то будет полезен :).

И так поехали:

Скрипт доступности ресурса

  1. Создадим текстовый файл 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” – Кодировка сообщения, без нее будет крякозябры.
  1. Даем права на исполнение
chmod +x ping_test.sh

Для того чтобы сработала отправка почты нужно установить пакет sendmail

sudo apt install sendmail
  1. Радуемся, через заданный промежуток времени в событии будет высвечено сообщение о статусе.

Скрипт доступности ресурса каждые 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]

. . . .

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

5 2 голоса
Рейтинг статьи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов cookie) с использованием трекеров "Google Analytics" и "Yandex.Metrics". Порядок обработки Ваших персональных данных, а также реализуемые требования к их защите, содержатся в Политике конфиденциальности.
Принять