Proste powiadomienie SMS o awarii

Od czasu do czasu pojawia się problem tzw „awarii”, na nieszczęście o której powiadamia Cię najszybciej końcowy użytkownik. Warto zabezpieczyć się przed takimi wydarzeniami prostym rozwiązaniem w postaci skryptu, który wyśle nam SMSa w odpowiedniej chwili – czyli w takiej, gdy dana maszyna przestanie działać. W moim przypadku „przestanie działać” = nie odpowiada na ping 🙂 Reszta usług wspierana watchdog’iem działa samoistnie.

Potrzebujemy kilku prostych elementów:

  1. Musimy mieć możliwość wysłania SMSa (możemu też sobie wysłać email 🙂
  2. Co za tym idzie musimy mieć sprawną bramkę SMS (ja korzystam z www.internetcalls.com – pomijam taniość połączeń, ale SMS można wysyłać przez odpowiedni URL)
  3. Musimy wiedzieć jak sprawdzić czy urządzenie nie działa – tak jak wspominałem u mnie jest to zwykły ping

Skrypt który przedstawiam poniżej jest BARDZO PROSTY wręcz PRYMITYWNY, można go napisać lepiej, ale… ten mi działa.


#!/usr/local/bin/bash

server="xxx.xxx.xxx.xxx";
data=`date "+%H:%M"`
msg="Serwer%20$server%20padl%20o%20$data";
url="https://myaccount.internetcalls.com/clx/sendsms.php?username=XXX&password=XXX&from=+48000000000&to=+48000000000&text=$msg";

/sbin/ping -o -t 2 $server

 

if [ $? -eq 2 ]
then
/usr/local/bin/wget -q --no-check-certificate $url;
fi

Kilka słów komentarza:

zmienna server zawiera IP maszyny pingowanej, data zbiera aktualna godzine, msg to treść komunikatu jaki nam przyjdzie, url to url jaki wywołujemy żeby wysłać wiadomość. Następnie robimy ping, parametr -o oznacza, że interesuje nas pierwsza odpowiedź serwera, -t 2 to czas jaki dajemy serwerowi na odpowiedź. 

Jeżeli ping jeżeli się powiódł, zwraca exit code = 0, każdy inny oznacza błąd – w moim przypadku 2 mówi nam, że maszyna nie odpowiada na ping. Na koniec odpalamy wgeta z parametrami -q – czyli bez zbędnych informacji i –no-check-certificate bo połączenie jest po SSL i nie sprawdzamy poprawności certyfikatów.

No.. na koniec całość wpinamy do crontaba i… czekamy na SMSy 🙂