Powiadomienia sms – bash/linux

4 03 2013

Po długiej przerwie wrzucam coś nowego w końcu. Powodem jest wiele pytań „jak to zrobić” na forum trzepak.pl. Chodzi o powiadamianie o aktywności/awarii urządzeń w sieci na podstawie odpowiedzi na ping. Jakiś czas temu sam z tego zacząłem korzystać. Stworzyłem skrypt który czyta z pliku hosts adresy IP które ma odpytywać wraz z opisami i po zmianie statusu wysyła smsa z powiadomieniem. Skrypt wykorzystuje konto na smscenter.pl, ale równie dobrze można go przerobić pod innego operatora zmieniając tylko wpis http wysyłający smsa. Zależnie od wpisu w cron skrypt pinguje adres IP i wynik zapisuje do pliku status.log, jeśli następny test jest taki sam to nie wysyła smsa. Jeśli status się zmieni, bo host będzie niedostępny to zostanie wysłany sms. Przy kolejnej próbie host nadal nie odpowiada, ale nie zostanie wysłany sms. Dopiero kiedy host zacznie odpowiadać sms zostanie wysłany, że host już działa. Jak to wygląda:

Skrypt:

#!/bin/sh

dziala=”alive”
awaria=”unreachable”

for i in `cat /etc/net/ping/hosts | cut -d’#’ -f1`
do

IP=`echo $i | cut -d’;’ -f1`
OPIS=`echo $i | cut -d’;’ -f2`

touch /var/log/ping/status.log-$OPIS
cp /var/log/ping/status.log-$OPIS /var/log/ping/status.log.old-$OPIS
fping -r 4 `echo $IP` | awk {‚print $3;’} > /var/log/ping/status.log-$OPIS

teraz=`cat /var/log/ping/status.log-$OPIS`
poprzednio=`cat /var/log/ping/status.log.old-$OPIS`

if [ $teraz = $awaria ] && [ $poprzednio = $dziala ]; then

msg=”AWARIA $OPIS”
curl -S -d „user=uzytkownik&pass=zaszyfrowane_haslo_md5&type=sms&number=48tel&text=$msg&from=ISP” api.mobitex.pl/sms.php > /dev/null
fi

if [ $teraz = $dziala ] && [ $poprzednio = $awaria ]; then

msg=”DZIALA $OPIS”
curl -S -d „user=uzytkownik&pass=zaszyfrowane_haslo_md5&type=sms&number=48tel&text=$msg&from=ISP” api.mobitex.pl/sms.php > /dev/null
fi

done

Plik hosts znajdujący się w tym samym katalogu co plik z skryptem wygląda następująco:

1.1.1.1;HOST1(dowolny opis hosta)

2.2.2.2;HOST2

Dodatkowo należy stworzyć w /var/log katalog ping w którym będą przechowywane pliki z statusami odpowiedzi hostów. Katalog musi mieć prawo zapisu dla usera z którego uruchomiony jest skrypt.

Uruchamianie skryptu z crona może wyglądać tak:

*/2 * * * * root /etc/net/ping/test

W tym wypadku dostępność hostów sprawdzana jest co 2 minuty.

W przypadku awarii dostaniemy smsa o treści: „AWARIA HOST1”. Jeśli host wróci do statusu „online” to dostaniemy smsa o treści „DZIALA HOST1”.

To byłoby na tyle. Nie jest to żaden odkrywczy skrypt, bo źródłem były posty na trzepaku oraz to co znalazłem na google. Mam nadzieje że komuś on pomoże. Życze jak najmniej smsów z tekstem AWARIA 😉

Internet Czersk


Opcje

Info

1 Odpowiedź do “Powiadomienia sms – bash/linux”

4 03 2013
mmm (17:20:50) :

wszystko fajnie ładnie, idioto odporne, ale było już – to raz 😉 a dwa… bardzo często nie ma sensu pingować kolejnych adresów, jak jeden nie odpowie – bo wiadomo, że reszta też nie odpowie. Przydał by się podział na segmenty sieci, szczególnie, że SMSy wysyłane są dla każdej zmiany stanu urządzenia osobno, a nie w jednej wiadomości.

Odpowiedz

Możesz używać tagów : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>