Проверяем хост на доступность (ping) и пишем в файл (отправляем сообщение) при падении линка. Полезный скрипт мониторинга ресурсов.

Возникла простая задача, проверять удаленный роутер на доступность и вести статистику. Задача тривиальная и поднимать Zabbix или что-то подобное для одного хоста не решился. В итоге написал скрипт на bash, который пингует удаленный хост. Этот скрипт можно модифицировать и под другие задачи, когда требуется менять статус в зависимости от проверки чего-либо.

В случае если связь пропадает (или появляется) скрипт пишет статус и время в лог файл. То есть, в файле у нас фиксируются только изменения состояния подключения, что удобно, экономит место и наглядно показывает статистику.

Создаем файлик:
touch /etc/routerstatus.sh
Даем ему права на исполнение:
chmod +x /etc/routerstatus.sh
И засовываем в кронтаб исполнять каждую минуту (можно не от рута):
nano /etc/crontab
*/1  *  * * *   root    /etc/routerstatus.sh
Кроме записи в файл, вы можете добавить туда любое действие, например, отправить сообщение. Вот сам скрипт:

#!/bin/bash

# Проверяем наличие файла со статусом
if [[ -f '/var/log/routerstatus.log' ]]; then
    echo "Файл со статусом есть"
else
# Если нет, то создаем. По умолчанию считаем, что связь уже есть
    echo "connected" > /var/log/routerstatus.log
fi

# Объявляем переменные
status="$(cat /var/log/routerstatus.log)"
logfile=/var/log/pingrouter.log
# указывает IP хоста, количество пингов - 2 раза, и смотрим количество ошибок соединения
result=$(ping -c 2 192.168.1.1 2<&1| grep -icE 'unknown|expired|unreachable|time out|100% packet loss')
# Если пинга нет, а до этого был, то меняем статус и пишем, что связь пропала
if [[ "$result" != 0 && "$status" = connected ]]; then
date "+%Y.%m.%d %H:%M:%S Связи не было" | tee -a "${logfile}"
echo 'disconnected' > /var/log/routerstatus.log
# также тут можно отправить сообщение например в телеграмм
# предварительно создав своего бота и добавив его в беседу, как-то так (загуглите самостоятельно, это просто)
curl -s -X POST https://api.telegram.org/botXXXXXXXXX:A1HQ123Ld3E4aC3aZ_hAGq2n122-322yD_g/sendMessage -d chat_id=-XXXXXXXXX -d text="Server1: связи нет"
exit 0
# Если пинг есть, а до этого не было, меняем статус и пишем, что связь появилась
elif [[ "$result" = 0 && "$status" = disconnected ]]; then
date "+%Y.%m.%d %H:%M:%S Связь появилась" | tee -a "${logfile}"
echo 'connected' > /var/log/routerstatus.log
# также тут можно отправить сообщение например в телеграмм
# предварительно создав своего бота и добавив его в беседу, как-то так (загуглите самостоятельно, это просто)
curl -s -X POST https://api.telegram.org/botXXXXXXXXX:A1HQ123Ld3E4aC3aZ_hAGq2n122-322yD_g/sendMessage -d chat_id=-XXXXXXXXX -d text="Server1: связь появилась"
exit 0
# В других случаях ничего не делаем
else
exit 0
fi

Комментариев нет:

Отправить комментарий