Jako, że adminuję małą siecią radiową, a nie lubię dowiadywać się o padzie któregoś nadajnika od jej użytkowników, wpadłem na pomysł, żeby do monitorowania i sygnalizacji wykorzystać serwerowy głośniczek, co jest dla mnie optymalnym rozwiązaniem, biorąc pod uwagę, że serwer stoi w zasięgu słuchu. Zresztą, zawsze można sobie głośnik podprowadzić kablem...
Skrypt można w łatwy sposób dostosować do tego, aby wykonywał inną akcję, np. wysyłał maile lub sms-y.

Do działania wymaga zainstalowanego programu fping i beep - do zdobycia w większości dystrybucji :)

Skrypt jaki jest każdy widzi, może komuś się przyda :)

#!/bin/bash
 
# Skrypt do monitorowania dostępności hosta w sieci w oparciu o PING (program fping) i sygnalizowania tego - w tym przypadku przez PC speaker.
# Uruchamia się go przez podanie właściwych zmiennych, np. ADRES1="192.168.100.132" INTERVAL_IF_ALIVE="30" DESC="MT2-most5G"  BEEP_PARAM="-r 4 -l 10" /etc/livecheck.sh
 
# zmienne:
#  ADRES1: adres sprawdzanego hosta
#  ADRES2: adres drugiego sprawdzanego hosta, z powyższym tworza parę -  skrypt "zabipa", gdy obydwa hosty nie odpowiedzą na ping
#  DESC: przyjazny opis, jeśli brak to w logu zostanie zapisany adres ADRES1
#  INTERVAL_IF_ALIVE: czas pomiędzy sprawdzeniami, jeśli ostatnie sprawdzenie dało wynik pozytywny
#  INTERVAL_IF_DEAD: czas pomiędzy sprawdzeniami, jeśli ostatnie sprawdzenie dało wynik negatywny (unreachable)
#  FPING_PARAM: parametry jakie można przekazać do programu fping, np. można wydłużyć czas sprawdzania poprzez FPING_PARAM="-t 5000"
#  BEEP_PARAM: parametry jakie można przekazać do programu beep, np. w celu zróznicowania wydawanych dzwięków.
#  LOG: plik, do którego są logowane "pady"
 
# ścieżka do programów na wszelki wypadek
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin" 
TAG_SENT_LOG="0"	# zmienna do ustalenia czy log został wcześniej zapisany
 
 
#sekcja sprawdzania zmiennych
if [ -x $ADRES1 ] 
then
ADRES1="127.0.0.1"
fi
 
if [ -x $ADRES1 ] && [ -x $ADRES2 ]
then
CASE="single"
else
CASE="double"
fi
 
if [ -x $DESC ]
then
DESC=$ADRES1
fi
 
 
if [ -x $LOG ]
then
LOG="/var/log/livecheck.log"
fi
 
if [ -x $INTERVAL_IF_ALIVE ]
then
INTERVAL_IF_ALIVE="300"
fi
 
if [ -x $INTERVAL_IF_DEAD ]
then
INTERVAL_IF_DEAD="10"
fi
 
# sekcja funkcji
dead() {
	if [ $TAG_SENT_LOG -eq 0 ]
	then 
	DATE="`date +%X\,\ %d\ %b`"
	echo "host nie odpowiedział - zaznaczono w logu"
	echo -e "$DATE: DEAD  - $DESC" >> $LOG	
	TAG_SENT_LOG="1"
	fi
INTERVAL=$INTERVAL_IF_DEAD
beep $BEEP_PARAM
 
return $INTERVAL
}
 
alive() {
	if [ $TAG_SENT_LOG -eq 1 ]
	then
	DATE="`date +%X\,\ %d\ %b`"
	echo "host odpowiedział - zaznaczono w logu"
	echo -e "$DATE: ALIVE - $DESC" >> $LOG
	TAG_SENT_LOG="0"
	fi
INTERVAL=$INTERVAL_IF_ALIVE
 
return $INTERVAL
}
 
case "$CASE" in
 
single)		# sekcja sprawdzania pojedynczego hosta
while true 	# nieskończona pętla
do
 
fping $ADRES1 $FPING_PARAM	 # fping działa w ten sposób, że wysyła ping do hosta; zwraca status wyjścia 0 przy pierwszej pozytywnej odpowiedzi. Jeśli host jest niedostępny, to robi 3 próby i zwraca status wyjścia 1
 
if [ $? -gt 0 ]		# sprawdzenie stanu wyjścia pinga
then
	dead	# wywołanie funkcji dead()
else
	alive	# wywołanie funkcji alive()
fi
 
sleep $INTERVAL
 
 
done
 
;;
 
double)		# sekcja sprawdzania dwóch hostów;  skrypt "zabipa", gdy obydwa hosty nie odpowiedzą na ping
while true 	# nieskończona pętla
do
 
fping $ADRES1 $FPING_PARAM
ADRES1_STATUS=$?
 
fping $ADRES2 $FPING_PARAM
ADRES2_STATUS=$?
 
if [ $ADRES1_STATUS -gt 0 ] && [ $ADRES2_STATUS -gt 0 ]
then
	dead	# wywołanie funkcji dead()
else
	alive	# wywołanie funkcji alive()
fi
 
sleep $INTERVAL
 
done
 
;;
esac
 
 

Przykład logów:

serwer ~ # tail -n 4 /var/log/livecheck.log
12:10:04, 18 kwi: DEAD  - MT1-most5G
12:12:14, 18 kwi: ALIVE - MT1-most5G
19:57:33, 18 kwi: DEAD  - MT2-most5G
20:05:26, 18 kwi: ALIVE - MT2-most5G