PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Soll-Prozess finden und wenn nicht starten..



MrRight
08-02-2004, 09:18
Liebe Forenreisende,

ich bin auf dem Gebiet *nix ein absoluter Newbie und hab mal ne Frage an euch.
Ich habe auf meinem Server (1und1-Root) einen Java-Chatserver laufen, dieser befindet sich noch im Beta-Stadium und schiesst sich gelegentlich noch ab.

Dieser Java-Prozess wird als Hintergrundprozess gestartet und läuft dann so vor sich hin. Da ich ja nicht immer schauen kann, ob der Prozess noch läuft hätte ich gerne per Crontab alle 15min überprüft ob dem so ist und wenn nicht eben diesen gerne wieder gestartet.

Weiss aber nicht wie ich den Prozess finde. ps ax ist klar, da seh ich ihn ja auch.. aber wie mach ich der Crontab klar was ich davon suche.

Vielen Dank im Voraus für die Hilfe

Gruss
MrR alias Chris

Boron
08-02-2004, 10:23
Schreibe ein Shellscript, das die Ausgabe von "ps" nach deinen Programm absucht. Wenn dieses Programm nicht läuft wird es gestartet.

Dieses Script trägst du dann in die Crontab ein.

MrRight
08-02-2004, 11:53
Original geschrieben von Boron
Schreibe ein Shellscript, das die Ausgabe von "ps" nach deinen Programm absucht. Wenn dieses Programm nicht läuft wird es gestartet.

Dieses Script trägst du dann in die Crontab ein.

Ummzzz... ja, da waren sie wieder meinen 10 Probleme...

Danke für den Hint,, aber aehm.. kein plan wie ich das auslesen kann.

:(

peschmae
08-02-2004, 12:33
Ist nicht soo schwer wie du denkst.

Wichtigstes Werk auf dem Weg zur Lösung ist das da: klick (http://www.tldp.org/LDP/abs/html/) - nennt sich Advanced, ist es aber glücklicherweise nicht.

Mit sowas ähnlichem wie dem da siehst du dann nur noch deinen Prozess:


ps -ax 2<&1 | grep java

Nein, falsch - das blöde Grep ist auch noch drauf.

Also muss dein Script etwa so aussehen:



#!/bin/bash
if $(ps -ax 2<&1 | grep -v grep | grep -q /usr/bin/java); then
echo gefunden
else
echo nicht gefunden
fi


ps -ax 2<&1 liefert dir die Prozesse
grep -v grep entfernt den "grep-Prozess" aus der liste
grep -q /usr/bin/java liefert dir nur noch die Prozesse der Liste die /usr/bin/java in der Ausgabe von ps -ax haben - das sollte nur noch der Richtige sein, sonst musst du das entsprehchend auf etwas abändern, was nur beim Richtigen angezeigt wird.

Nun musst du eigentlich nur noch das "echo nicht gefunden" durch einen entsprechenden Programmstart ersetzen. Aber vorher noch ein bisschen Testen - ich weiss nicht ob das 90 oder 100%-ig stimmt.

MfG Peschmä

TheDodger
26-02-2004, 05:10
ein 'pidof <programmname>' hilft manchmal auch ein wenig ...

ccc
26-02-2004, 09:41
oder

------------------------------------------------------
#!/bin/sh

# check if is running

ps ax | grep chatserver | grep -v grep

if [ "$?" != "0" ] ; then

# restart PROCESS

/usr/bin/chatserver start

fi
------------------------------------------------------


und cron anpassen


*/5 * * * * root /etc/chatserver.sh >/dev/null 2>&1


gruss
ccc

systemdefender
28-02-2004, 19:17
Original geschrieben von ccc

und cron anpassen ...
*/5 * * * * root /etc/chatserver.sh >/dev/null 2>&1

1. lass den script bitte _nicht_ unter root laufen !!!
2. ein script hat nichts in /etc zu suchen!
3. wenn, dann " 2>&1 >/dev/null " , oder?


übrigends, du kannst deinen dienst ruhig sofort nach dem crash restarten!

dazu startest du beim hochfahren einmal ...


(( while($NUL);do su -l mein_user_account -c '/usr/local/bin/jchat'; date >>/var/log/jchat ;done )&)

ein
cat /var/log/jchat hält dich auf dem laufenden, wann der gefallen ist.

cu