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