'ps -ef | grep tomcat' in einer Schleife


Commu

Grünschnabel
#1
Hallo Zusammen,

ich wollte ein überwachungssript bauen.

PHP:
#!/bin/bash
kommand='ps -ef | grep tomcat'
i=0
while [ $kommand ]
do
    $i=$i+1
done
echo Ergebnis = $i
ich scheitere schon im Anfang
das Ergebnis = 0
Kann mir jemand helfen?

Danke und Gruß Jörg
 

melmager

Erfahrenes Mitglied
#2
mir ist noch nicht ganz klar was das ergebnis sein soll

kommand='ps -ef | grep tomcat | wc -l'

ergebnis ist anzahl der gefundenen zeilen mit "tomcat" plus eins da auch der grep mitzählt
 

Commu

Grünschnabel
#3
genau, ich wollte die Anzahl der Prozesse = 2 haben, ist aber nicht.
Statt dessen habe ich die Meldung zuviele Parameter in der WHILE-Schleife.

wie bekomme ich die 2 in eine Variable?

Gruß Jörg
 
Zuletzt bearbeitet:

melmager

Erfahrenes Mitglied
#4
mit dem wc -l im Befehl wird die While Schleife nicht gebraucht.
wc -l zählt einfach die zeilen von der grep ausgabe :)
sprich in kommand ist deine 2 ....
 

Commu

Grünschnabel
#5
wenn ich 'echo $kommand' ins Script schreibe bekomme ich immer den Befehl angezeigt
stellt sich die Frage wie das mit den '' ist?
kann man die auch weg lassen?
oki werde testen.

Danke für die Hilfe
Gruß Jörg
 

Commu

Grünschnabel
#6
Da bich noch mal,

ich habe das Script umgestellt.

PHP:
#!/bin/bash

tom=ps -ef | grep tomcat | wc -l

echo Ergebnis = $tom

if [ $tom < 2 ]
    then echo 'PROZ ERROR: 0 Tomcat ist nicht gestartet'
  elif [ $tom = 2 ]
    then echo 'PROZ OK: Tomcat läuft'
  else echo 'PROCS CRITICAL: mehr als 1 Prozess gestartet'
fi
als Rückgabe habe ich:

./check_tomcat: line 5: tom: command not found
0
Ergebnis =
./check_tomcat: line 10: 2: Datei oder Verzeichnis nicht gefunden
./check_tomcat: line 12: [: =: unary operator expected
PROCS CRITICAL: < 1 Prozess gestartet

wenn ich den PS-Befehl in '' schreibe bekomme ich in $tom nur die Befehlszeile ausgegeben.
Ergebnis = ps -ef | grep tomcat | wc -l
 

melmager

Erfahrenes Mitglied
#7
also
doppelte hochkomma " sind bei ausgaben zu nutzen
echo "das ist ne ausgabe"
also wenn man mit zeichen arbeiten will "
wenn etwas ausgeführt werden muss dann sind
die hochkomma in der Ebene der Zahlen (mit shift) ` zu nutzen
also muss deine Zeile so aussehen:
tom=`ps -ef | grep tomcat | wc -l`
echo "ausgabe anzahl $tom"

statt hochkomma kann auch
tom=$(ps -ef | grep tomcat | wc -l)
benutzt werden , also eine klammer die am anfang ein $ hat
 
Zuletzt bearbeitet:

Commu

Grünschnabel
#9
nach langer Pause bin ich wieder da.

@Bratkartoffel : weil der NAGIOS-Server, egal mit welchem check_???, immer 0 liefert möchte ich das mit einem Script selber umgehen.
Führe ich die die Command in der Eingabe manuel durch, habe ich ein Ergebnis.

@melmager
tom=$(ps -ef | grep tomcat | wc -l) hat den erfolg gebracht, aber warum werden mir 4 prozesse angezeigt?
Wenn ps -ef | grep tomcat | wc -l ausführe habe ich nur 2.

Vielen Dank und Gruß Jörg
 

melmager

Erfahrenes Mitglied
#10
daran habe ich nicht gedacht :-(
alles in der klammer $( ) steht wird in einer extra shell ausgeführt und da ja in der suchabfrage auch
der string tomcat steht werden die "such" prozesse mit gefunden.
mit den ` Hochkomma sollte es 2 werden weil dann die gleiche shell ausführt
tom='ps -ef | grep -c firefox'
sollte auch zählen