#!/bin/bash #selfhealing.sh #Selbstheilungversuch eines Dienstes #wenn der Dienst nicht mehr reagiert, dann wird der Dienst 3mal mit zunehmender Verzögerung von 1 Minute neu gestartet. #wenn das nicht klappt, dann wird der Server neu gestartet. #wiederkehrender Aufruf per cron, nagios oder prtg dae=postfix #Verzögerung verz=60 ####################### function watchprc() { #echo "in watchprc" service $dae status 2>&1 1>/dev/null f=$? if [ $f -eq 0 ]; then exit 0 else return $f fi } ####################### function startprc() { #echo "in startprc" service $dae start 2>&1 2>/dev/null watchprc echo $verz Verzögerung, danach erneuter Versuch $dae zu starten... sleep $verz } ####################### ###Einsprung watchprc #versuche den Dienst 3mal mit wachsender Verzögerung #zu starten, dann starte den Server neu for i in `seq 1 3` do startprc $verz #jeden Versuch um 60s mehr verzögern let "verz +=60" done if [ ! $f -eq 0 ]; then echo "$0: dienst $dae konnte auf $HOSTNAME nicht gestartet werden,versuche reboot ...!!!" logger "$0: dienst $dae konnte auf $HOSTNAME nicht gestartet werden, versuche reboot ...!!!" # echo "$0 konnte $dae auf $HOSTNAME nicht starten, deshalb reboot ..." | mail admin@mydom.ain -s rebootversuch reboot fi