![](https://seccdn.libravatar.org/avatar/7dcd6443713cd06cfa54e9a71f94d07b.jpg?s=120&d=mm&r=g)
Hi, ich schrieb: [...]
VAR=`ps fax|grep "prog.jar"|wc -l|awk '{ print $1 }'` if [ $VAR -lt 2 ]; then [...] Seit der Umstellung auf SuSE8.0 habe ich feststellen muessen, dass mein Programm ab und an mehrfach gestartet wurde. Bei genauerem Hinschauen stellte sich heraus, dass das von mir verwendete ps scheinbar manchmal eine leere Prozessliste zurueckgibt, auf jeden Fall hat die Variable VAR in diesen Faellen den Wert 0.
Jan Trippler antwortete:
Du hast bisher implizit damit gerechnet, dass der grep mit in der ps-Liste auftaucht. Das ist aber nicht sicher (dass es bisher funktioniert hat, ist IMHO Zufall). Dein Workaround ist unnötig, wenn Du den grep rausfilterst: VAR=`ps fax|grep "prog.jar"|grep -v grep | wc -l|awk '{ print $1 }'` Du musst im Hinterkopf behalten, dass ps immer eine Momentaufnahme des Geschehens liefert.
Das ist zwar richtig, aber IMHO hier nicht der Fall gewesen, denn dann hätte VAR nicht den Wert 0, sondern mindestens 1 haben müssen, denn wie gesagt lief das Programm noch und wurde trotzdem neu gestartet. Mein Script ist zwar falsch, weil es bei VAR<2 das Programm neu startet, aber die Prozessliste war "leer". Dagegen dürfte im Prinzip auch Deine folgende Methode nicht helfen:
BTW: Ich würde das eher so machen, ist weniger aufwändig (und benötigt ein paar Prozesse weniger):
if ps -ef | grep prog.jar | grep -vq grep; then # Programm rennt bereits else # neu starten fi
Aber danke für den Tipp, sieht viel kompetenter aus als mein Stoppelscript. :) Hannes