Есть в сети несколько серверов/компьютеров, которые должны быть доступны всегда.
Если они вдруг не доступны, нужно сразу же сообщить об этом.
Для начала разберемся, как отправлять сообщение в jabber
echo "hello from `hostname`" | /usr/bin/sendxmpp -t -u mail@jabber.company -p PaSSWorD /Где:
-s testmessage admin@jabber.company
-t - указываем использовать SSL соединения
-u mail@jabber.company - JID пользователя
-p PassWorD - это пароль пользователя
-t testmessage - тема сообщения
admin@jabber.company - JID получателя
Взято с http://silinio.webhost.ru/sendxmpp-notify.html
Ну а теперь скрипт который мониторит доступность серверов, и в случае не доступности, шлет сообщение в jabber.
Jabber сервер установлен и настроен.
#!/bin/bashЗасунуть этот скрипт в CRON, и каждые 10 минут запускать.
for i in 192.168.1.1 192.168.1.105;
do
if eval "ping -c 2 $i"; then
file="/home/name/scripts/pingserv/pingd/file`echo $i`"
if [ -e $file ]; then
rm "/home/name/scripts/pingserv/pingd/file`echo $i`"
echo "`date` SERVER `echo $i` Is Work =)" | sendxmpp -d -s "Server `echo $i` Work =)" username@jabber > /dev/null 2>&1
fi
echo "11" > /dev/null
else
file="/home/name/scripts/pingserv/pingd/file`echo $i`"
if [ -e $file ]; then
echo "11" > /dev/null
else
echo "$i" > /home/name/scripts/pingserv/pingd/ping.log
echo "`date` SERVER `echo $i` NOT Work!!" | sendxmpp -d -s "Allarm!!! `echo $i` DOWN!!!!" username@jabber > /dev/null 2>&1
touch "/home/name/scripts/pingserv/pingd/file`echo $i`"
fi
fi
done
*/10 * * * * /home/name/scripts/pingserv/pingip > /dev/null 2>&1Общая идея - пинг серверов, если какой то не доступен, сообщить в jabber.
создать файл c ip сервера, чтобы при следующем пинге, если сервер все еще не доступен, не отсылать повторное сообщение.
Если сервер стал доступен, удалить этот файл и сообщить о доступности сервера.
Другая реализация, проверять доступность интернета. Если интернет не доступен, сообщить, и создать файл-маркер, существование которого значит что интернет не доступен.
При следующей проверке доступности, проверить, если сервер все еще не доступен, и файл еще не удален. запустить скрипт, перезагрузки модема.
#!/bin/bash
if eval "ping -c 2 yandex.ru"; then
file="/home/name/scripts/pingserv/pingd/yandex"
if [ -e $file ]; then
rm "/home/name/scripts/pingserv/pingd/yandex"
echo "Internet UP =)" | sendxmpp -d -s "Internet" username@jabber #> /dev/null 2>&1
else
echo "11" > /dev/null
fi
else
file="/home/name/scripts/pingserv/pingd/yandex"
if [ -e $file ]; then
/home/name/scripts/modem
echo "`date` Modem REBOOT" | sendxmpp -d -s "Modem reboot" alexey@ermolino #> /dev/null 2>&1
else
echo "Internet DOWN!" | sendxmpp -d -s "Internet" alexey@ermolino #> /dev/null 2>&1
touch "/home/name/scripts/pingserv/pingd/yandex"
fi
fi
Комментариев нет:
Отправить комментарий