Ich habe einen Prozess-Monitor erstellt, um auf das Vorhandensein eines laufenden Prozesses zu überprüfen, und wenn gefunden, müssen wir überprüfen, seine Eltern zu bestimmen, ob es akzeptabel ist oder nicht, es ist ein Sicherheitsüberprüfung grundsätzlich. Es funktioniert großartig, wenn ich nach laufenden Prozessen suche und mir Ergebnisse gebe, die ich erwarte. Aus irgendeinem Grund, wenn kein Prozess gefunden wird, spuckt er eine leere Zeile statt "ok" aus, wie ich es erwarten würde. Ich weiß, dass die Variable rmanRUNNING mit einer 0 gefüllt wird, wenn kein Prozess läuft, habe ich überprüft, also bin ich mir nicht sicher, warum die erste if-Anweisung nicht einfach auf die else übergeht und dann das Echo "ok" ausführt "Linie vor dem Schließen. Jede Hilfe wird sehr geschätzt. Siehe unten:Bash Prozess Monitor Skript Echo leer, wenn kein Prozess gefunden
#!/bin/bash
rmanRUNNING=`ps -ef|grep rman|egrep -v grep|wc -l`
if [ "$rmanRUNNING" -gt "0" ]
then
PPIDs=($(ps -oppid= $(pgrep rman)))
kshddPID=($(pgrep -f 'ksh.*/rman_dd.ksh'))
for i in "${PPIDs[@]}"
do
:
for j in "${kshddPID[@]}"
do
:
if [ "$i" == "$j" ]
then
result="ok"
else
result="bad"
break
fi
done
if [ "$result" == "bad" ]
then
break
fi
done
echo "$result"
else
echo "ok"
fi
ich etwas einfach nicht fehlen darf, ich kann es einfach nicht zu trennen scheinen, wenn ich dies zu vereinfachen, nur um das, wenn mit dem aktuellen bedingten und dann ein Echo gefolgt von einem anderen und ein echo, es scheint richtig zu funktionieren, also habe ich das gefühl, dass es etwas mit den schleifen im main zu tun hat, wenn das einen fehler verursacht, den ich nicht sehe. Oder es hat vielleicht mit einem Missverständnis zu tun, wie Pause funktioniert, so dass ich bis zu einem Punkt ausbricht, wo ich eine leere "Ergebnis" -Variable ausspreche und dann beendige, bin ich mir einfach nicht sicher.
Vielen Dank im Voraus!
Ich glaube nicht, dass es mit dem Problem zusammenhängt, aber warum verwenden Sie 'pgrep' nicht, wenn Sie' rmanRunning' zuweisen? – Barmar
Führen Sie Ihr Skript mit 'bash -x' aus, damit es Ihnen die Zeilen anzeigt, während sie ausgeführt werden. Dies sollte Ihnen sagen, wo es schief geht. – Barmar
Sie erhalten eine leere Ausgabe, wenn '$ rmanRunning' größer als 0 ist, aber' $ kshddPID' leer ist, weil die innere 'for'-Schleife nichts bewirkt. – Barmar