#!/bin/bash # selfhealing.sh / richard / 2019 # Script für prtg zur Überwachung und Neustart von Diensten in linux # bei Fehlern wird einmal versucht dene Dienst neu zustarten, # schlägt das fehl, wird der host neu gestartet # muss auf zielhost in Verzeichnis /var/prtg/scriptsxml/ liegen, # damit es ausgewertet wird. # rootrechte erforderlich reboot=0 lck="/tmp/selfhealing.lock" ########################### # Array der zu überwachenden Dienste array=( atd cron ntpd cups sshd ) ########################### # Dienst prüfen function watchprc() { service $1 status 2>&1 1>/dev/null if [ $? -ne 0 ]; then startprc $1 else echo -n 0 return 0 fi } ########################### # Dienst starten function startprc() { if [ -e $lck ];then service $1 start 2>&1 2>/dev/null if [ $? -ne 0 ];then reboot=1 echo -n 3 fi else service $1 start 2>&1 2>/dev/null echo -n 2 touch $lck 2>&1 2>/dev/null fi } ########################### echo -n "<prtg>" for i in "${array[@]}" do echo -e "\n <result> <channel>Service: $i</channel> <value>\c" watchprc $i echo -n "</value> <ValueLookup>mydom.dienste.state</ValueLookup> <unit>Custom</unit> </result>" done # wenn dienst nicht gestartet werden konnte, neustart des hosts if [ $reboot -ne 0 ];then echo "<text>Dienst konnte wiederholt nicht gestartet werden. REBOOT ...</text>" rm $lck 2>&1 2>/dev/null echo -e "\n</prtg>" reboot fi # echo -e "\n</prtg>" exit