Die PID des richtigen Hintergrundprozesses ermitteln

06/12/2008 - 18:26 von Lothar Kimmeringer | Report spam
Hallo,

ich habe hier ein Problem bei der Erstellung eines Skriptes,
das ich fuer ha-linux verwenden soll. Bis dato hatte ich ein
Startskript, das einen Javaprozess startet und die PID des
Prozesses in eine Datei schrieb, das folgendermassen aussieht:

nohup sh -c "exec $RUN_CMD >>$PROC_CONSOLE 2>&1" >/dev/null &
echo $! > $PROC_PID

Die Shell ersetzt sich selbst durch den Javaprozess, so
dass $! die PID des Javaprozesses in die Datei schreibt.
Da die Startzeit des Javaprozesses, bis alles bereit ist
eine Weile benoetigt, muss das Skript aber umgebaut werden,
da es als OCF-Resource aus dem Aufruf mit dem Parameter start
erst dann wieder zurueckkommen darf, wenn alles bereit ist.

Da ich nicht so vorgehen kann, wie z.B. im init-Skript von
MySQL, wo einfach darauf gewartet wird, dass ein bestimmter
Socket aufgeht, dachte ich mir, dass die einfachste Moeglich-
keit die ist, mittels tee die Standardausgabe in eine zweite
Datei umzulenken und in einer busy-wait-Schleife per grep
nach einer bestimmten Ausgabe zu suchen, die am Ende des Startups
ausgegeben wird. Folgendes habe ich dazu geaendert:

tempout="$TEMP_DIR/tempout.$$"
cmd="exec $RUN_CMD 2>&1 | tee $tempout | cat - >>$PROC_CONSOLE"
nohup /bin/bash -c "$cmd" & > /dev/null
pid=$!
echo $pid > $PROC_PID

Das Problem hier ist aber, dass sich die Shell nicht selbst
beendet und damit $! die PID der Shell und nicht mehr des
Java-Prozesses ist. Alles andere funktionert aber, also
das Hochfahren des Prozesses, der Busy-Wait und das Beenden
des Startskripts erst wenn alles hochgefahren ist.

Welche Moeglichkeit habe ich, das mit der PID zu loesen? Das
Hochfahren klappt, aber natuerlich funktioniert das Stoppen
dann nicht sauber. Die Shell wird abgeschossen, der Java-
Prozess laeuft aber natuerlich weiter. Ich koennte natuerlich
die Shell schon bei start abschiessen und mich ueber proc auf
die Suche nach meinem Javaprozess machen, denke aber, dass es
auch einfacher gehen muss. Allein mein Shellwissen ist hierbei
an ein Ende angekommen und waere ueber Tipps dankbar.


Danke und Gruesse, Lothar
Lothar Kimmeringer E-Mail: spamfang@kimmeringer.de
PGP-encrypted mails preferred (Key-ID: 0x8BC3CD81)

Always remember: The answer is forty-two, there can only be wrong
questions!
 

Lesen sie die antworten

#1 Bernd Hohmann
06/12/2008 - 19:28 | Warnen spam
Lothar Kimmeringer schrieb:

Prozess laeuft aber natuerlich weiter. Ich koennte natuerlich
die Shell schon bei start abschiessen und mich ueber proc auf
die Suche nach meinem Javaprozess machen, denke aber, dass es
auch einfacher gehen muss.



Meine Java-Programme kille ich immer so:

classname="net.blah.fasel.main.GibsMir"
pkill -f $classname

Damit erwischt man sie alle.

Bernd

Well, there's egg and bacon; egg sausage and bacon; egg and
; egg bacon and spam; egg bacon sausage
and ; spam bacon sausage and spam;spam
egg spam spam bacon and ; spam sausage

Ähnliche fragen