Eigenüberwachung der Gateways
Hier ist nun mein Monitoring/Überwachungsspricht das lokal auf einem Server laufen kann. Ich nenne es check_tasks und es liegt in /usr/local/bin/ Gestartet wird es z.B. via /etc/rc.local
/usr/local/bin/check_tasks &
Hier das Script, wenn es mit einem Parameter gestartet wird (check_tasks x), läuft ein einfacher Debug Mode, wenn man zufrieden ist, kann es in rc.local eingetragen werden oder mit check_tasks & gestartet werden. Verbesserungen usw. sind willkommen, am besten auf der Gateway Mailingliste.
#! /bin/bash
# Alle wichtigen Task pruefen und bei Bedarf neu starten und per Email informieren
# Variablen
logfile=/var/log/check_tasks
email=albi@freifunk-weinstadt.de
dnsip=172.21.28.1
dnsanfrage=web.de
dnsback=212.227
norestart=0
vpnerror=0
vpndown=1
if [ -n "$1" ]; then
testmode=$1
echo "start Testmode"
fi
if [ -z "$testmode" ]; then
# Bei Start erst mal warten
sleep 2
# Logfile kuerzen
mv -f $logfile $logfile.old
tail -n 1000 $logfile.old >$logfile
echo "Start $0"
echo "$( date ) Start $0" >>$logfile
fi
# Endlosschleife
while : ; do
# Antwort auf "" setzen
antwort=""
## dnsmasq pruefen
prg="dnsmasq"
back=`pgrep $prg`
echo -n "check $prg: "
if [ -z "$back" ] ; then
if [ $norestart -le 1 ] ; then
echo "Error"
antwort+="Fehler: $prg nicht gestartet\nFehler: $back\n\n"
echo -n "Restart $prg: " >>$logfile
date >>$logfile
service $prg restart
sleep 5
else
echo "Error (Norestart = $norestart)"
fi
else
echo "OK"
fi
## dnsmasq dns Anfragen pruefen
prg="dnsmasq"
# back=`dig @$dnsip +noall +answer $dnsanfrage`
back=`nslookup $dnsanfrage $dnsip`
zahl=`echo $back | grep -c $dnsback`
echo -n "check DNS-Anfrage: "
if [ "$zahl" -gt 0 ] ; then
if [ $norestart -le 1 ] ; then
echo "Error"
antwort+="Fehler: $prg antwortet nicht auf DNS-Anfragen\nFehler: $back\n\n"
echo -n "Restart $prg: " >>$logfile
date >>$logfile
service $prg restart
sleep 5
else
echo "Error (Norestart = $norestart)"
fi
else
echo "OK"
fi
## openvpn pruefen
prg="openvpn"
#ip=`ip -o -4 addr list tun0 | awk '{print $4}' | cut -d/ -f1`
ip=`ip -o -4 addr list tun0 | awk '{gsub("/.*","",$4); print $4}'`
echo -n "check ping web.de: "
back=$(ping -c2 -I $ip web.de 2>&1)
zahl=$?
if [ "$zahl" -gt 0 ] ; then
echo "Error"
echo -n "check ping 8.8.8.8: "
back=$(ping -c2 -I $ip 8.8.8.8 2>&1)
zahl=$?
fi
if [ "$zahl" -gt 0 ] ; then
if [ $norestart -le 1 ] ; then
echo "Error"
antwort+="Fehler: $prg antwortet nicht auf ping\nFehler: $back\n\n"
echo -n "Restart $prg: " >>$logfile
date >>$logfile
service $prg restart
((vpnerror++))
# nach Neustart laengere Pause
if [ $vpnerror -gt 1 ] ; then
# Gateway deaktivieren
batctl gw off
vpnerror=0
vpndown=1
fi
sleep 5
else
echo "Error (Norestart = $norestart)"
fi
else
if [ $vpndown -gt 0 ] ; then
# Gateway deaktivieren
batctl gw server
vpndown=0
fi
vpnerror=0
echo "OK"
fi
# Email senden wenn Fehler auftrat
if [ -n "$antwort" ]; then
norestart=5
echo "Sende Email an $email"
echo -n "Sende Email an $email: " >>$logfile
date >>$logfile
echo -e "$antwort" | mutt -s "Fehler auf Server $HOSTNAME" $email
fi
if [ $norestart -gt 0 ] ; then
((norestart--))
fi
if [ -z "$testmode" ]; then
sleep 50
else
echo "Norestart = $norestart"
fi
sleep 10
done