PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Prozess überwachen - bei Bedarf neu starten



Jaydee
13.10.06, 20:08
Hallo,

ich bin auf der Suche nach einer Möglichkeit einen Prozess zu überwachen ob dieser läuft und bei Bedarf, also wenn er nicht läuft ihn automatisch startet.

Es geht in meinem Fall um clamd. Ich starte ihn /etc/init.d/clamd start.

Gibt es da fertige Lösungen ?
Wer weiss Rat bzw. hat evtl was in der Richtung parat.

Vielen Dank

Alex

michaxyz
13.10.06, 20:15
Hallo Alex,

das hängt im Wesentlichen davon ab, wie lange Du ohne den Dienst auskommst. Wir haben bei uns auch ein paar Dienste, auf die wir nicht verzichten wollen. Dafür haben wir einen cronjob, der alle 5 Minuten nach dem rechten sieht. Wir überprüfen lediglich, ob der Dienst in der Prozessliste auftaucht. Wenn nicht, wird er neu gestartet.

Mfg Michael

Jaydee
13.10.06, 20:17
Hi,

was steht denn bei Dir in der crontab bzw wie sieht das Script aus?

Wenn der Dienst einige Minuten nicht läuft ist das zwar unschön, muss aber nicht 99.99% laufen.


Danke, Alex

michaxyz
14.10.06, 07:47
Hallo Alex,

wir haben da ein neues cron-verzeichnis für eingerichtet, so was wie cron.daily, nur eben alle 5min, also heißt das bei uns cron.5min.

In der /etc/crontab steht daher:
# m h dom mon dow user command
*/5 * * * * root run-parts --report /etc/cron.5min

Die erste Zeile ist eine Kommentarzeile (klaro)!

Unser Skript, dass nach unseren Diensten schaut, sieht dann ungefähr so aus:


#!/bin/sh
logfile=/var/ratse/log/cron.5min
# Stellt sicher, dass sshd immer wieder gestartet wird.
if [ $(ps -A | grep -c /usr/sbin/lshd) = 0 ];
then
echo "$(date) lshd wiederbeleben" >> $logfile
/etc/init.d/lsh-server start
fi

# Stellt sicher, dass der Portmapper laeuft
if [ $(ps -A | grep -c portmap) = 0 ];
then
echo "$(date) portmapper wiederbeleben" >> $logfile
/etc/init.d/portmap restart
fi

# Stellt sicher, dass die domaine gestzt ist
if [ $(ypdomainname) = "" ];
then
echo "$(date) YP-Domainnamen setzen" >> $logfile
ypdomainname rgp
fi

# Stellt sicher, dass der ypserver laeuft
if [ $(ps -A | grep -c ypserv) = 0 ];
then
echo "$(date) NIS wiederbeleben" >> $logfile
/etc/init.d/nis restart
fi

# Stellt sicher, dass der nfs-server laeuft
[ $(ps -A | grep -c nfsd) = 0 ] && /etc/init.d/nfs-kernel-server restart

# Stellt sicher, dass der dhcp-server laeuft
[ $(ps -A | grep -c dhcpd) = 0 ] && /etc/init.d/dhcp restart

# Stellt sicher, dass der Apache laeuft
if [ $(ps -A | grep -c apache2) = 0 ];
then
echo "$(date) Apache2 wiederbeleben" >> $logfile
/etc/init.d/apache2 restart
fi
# Stellt sicher, dass der Cups laeuft
if [ $(ps -A | grep -c cupsd) = 0 ];
then
echo "$(date) cupsd wiederbeleben" >> $logfile
/etc/init.d/cupsys restart
fi
# Stellt sicher, dass der Squid laeuft
#if [ $(ps -A | grep -c squid) = 0 ];
#then
# echo "$(date) squid wiederbeleben" >> $logfile
# /etc/init.d/squid restart
#fi

# Stellt sicher, dass der Samba laeuft
if [ $(ps -A | grep -c smbd) = 0 ];
then
echo "$(date) samba wiederbeleben" >> $logfile
/etc/init.d/samba restart
fi

if [ $(ps -A | grep -c nmbd) = 0 ];
then
echo "$(date) samba wiederbeleben" >> $logfile
/etc/init.d/samba restart
fi

# Stellt sicher, dass der webmin laeuft
if [ $(ps -A | grep -c miniserv.pl) = 0 ];
then
echo "$(date) webmin wiederbeleben" >> $logfile
/etc/init.d/webmin restart
fi
# Stellt sicher, dass der Drucker im CR1 laeuft
anz=$(lpstat -p hp-4000-n | grep -c disabled)
if [ "$anz" = 1 ];
then
echo "$(date) hp-4000-n wiederbeleben" >> $logfile
/sbin/ratse.clearPrinter -p hp-4000-n >> $logfile
fi


So, ich bin mir im Klaren darüber, dass das sicher besser oder eleganter oder sicherer geht. Ich habe nämlich erst vor zwei Jahren mit dem Scripten angefangen. Aber es hat uns bisher nicht im Stich gelassen.

So, denn mal viel Erfolg!

Mfg Michael

bla!zilla
14.10.06, 09:34
Schau dir mal Nagios an. Damit kannst du auch Dienste auf entfernten Maschinen überwachen und auch über Nagios, bzw. zusätzliche Tools, bei einem Event einen Eventhandler ausführen. Damit kannst du dann auch Dienste starten.

psy
14.10.06, 09:48
schau dir mal nagios an, damit kannst du prozesse überwachen und ggf. über sogenannte eventhandler wieder starten lassen.

http://www.nagios.org

edit:
oh gott, bin ich langsam ;)

bla!zilla
14.10.06, 10:49
Hör auf! Das war copy 'n paste und etwas Arbeit zum Umformulieren! ;)

psy
14.10.06, 11:37
Hör auf! Das war copy 'n paste und etwas Arbeit zum Umformulieren! ;)
ok, du hast mich durchschaut ... verdammt! :ugly:

Jaydee
14.10.06, 11:38
:) Danke Euch allen für die schnelle Hilfe.

Ich werde Eure Tips beherzigen.

Gruß & schönes Wochenende
Alex

bla!zilla
14.10.06, 11:58
Also wenn noch Hilfe zu Nagios notwendig ist (die Eventhandler sind nicht ohne...), dann mach aber bitte einen neuen Thread auf. Hier lesen genug Leute (inkl. mir) die sich mit Nagios auskennen. :)

Jaydee
14.10.06, 12:28
Hallo,

also ich fang mal "klein" an un teste das Script.

Allerdings ergibt if [ $(ps -A | grep -c /usr/sbin/clamd) = 0 ];
bei mir unter SuSE 10.0 immer "0", ergo wird versucht clamd neu zu starten.
Oder verstehe ich da was falsch?

Gruß
Alex

oracle2025
14.10.06, 12:58
Installier dir mal die sogenannten daemontools http://cr.yp.to/daemontools.html

Die sind dafür da Dienste zu überwachen und notfalls neu zu starten.

derRichard
14.10.06, 13:01
Installier dir mal die sogenannten daemontools http://cr.yp.to/daemontools.html

Die sind dafür da Dienste zu überwachen und notfalls neu zu starten.
hallo!

hehe, jetzt warst schneller als ich.
aber wie gesagt, daemontools sind super für sowas. ich lass damit viel laufen.
mysql, apache, spamd, clamd und natürlich qmail und djbdns.

das ist ein super "buch" zu den daemontools:
http://www.fehcom.de/qmail/docu/05_new.pdf

hth,
//richard

DomiNik
03.06.09, 16:46
Hallo miteinander!

Gerne würde ich dieses Thema nochmals aufgreifen.

Auch wir möchten unsere Dienste eines Red Hat Enterprise Linux 5 überwachen.
Allgmein nutzen wir WhatsUp Gold in diesem Zusammenhang.
Unsere Microsoft und CISO Umgebungen konnten wir schon erfolgreich hierin abbilden.

Besteht eine Möglichkeit per SNMP die laufenden Prozesse abzufragen (z. B. Informix DB).
Ich meine nicht die gesamte Anzahl der aktuell laufenden Prozesse.
Das funktioniert schon soweit.

Oder müssen wir definitiv auf Skipte ausweichen?

Danke & Gruß
DomiNik