2016-06-02 8 views
0

Ich frage mich, ob wir eine einzelne JVM innerhalb eines bestimmten Zeitlimits stoppen können. Wenn es nicht innerhalb dieses Zeitlimits stoppt, dann kill den Prozess von Shell-Skript.Stoppen Sie WebSphere JVM innerhalb des Zeitlimits?

Wenn wir ./stopServer.sh ausführen JVM_Name - Es wird so lange ausgeführt, bis der jvm nicht gestoppt oder bis zu einem Fehler beendet wird.

Was ich versuche zu tun ist: ./ stopServer.sh JVM_Name - Wenn dies nicht innerhalb von 2 min gestoppt (angenommen), dann töten Sie den Prozess (Aber wie es herauszufinden, ist nicht innerhalb von 2 Minuten durch Shell gestoppt Skript vor dem Prozess zum Töten gehen). Ich kann die Bedingung zum Töten schreiben. Aber nicht sicher, wie man überprüft, ob die JVM innerhalb von 2 Minuten gestoppt oder nicht, so dass wir weitermachen können, um den Prozess zu beenden.

Kann jemand bitte Shell-Skript-Code vorschlagen, um zu identifizieren, wenn der JVM innerhalb bestimmter Zeitgrenze oder nicht gestoppt wird?

+0

prüfen verwendet, um dieses: http: // stackoverflow.com/a/4340058/5934435 – Sampada

+0

@Sampada, die scheint, eine Windows-Frage gewesen zu sein, aix hier sprechend ... –

+0

Oh yeah. Du hast Recht @Stefan. Ich bin mir sicher, dass etwas ähnliches für aix zu schwer ist. – Sampada

Antwort

0

Eine JVM ist ein Prozess, und als solche können mit dem Befehl kill gestoppt werden - kill $processid oder brutaler kill -9 $processid

Wenn Sie beginnen, die JVM aus einem Skript so etwas wie java ... verwenden, dann schlage ich ein & am Ende setzen dieser Zeile und in der folgenden Zeile

processid=$! 

, die die ID des Hintergrundprozesses speichert. Dann

sleep 120 

wird für 2 Minuten warten. Jetzt haben Sie zwei Möglichkeiten - entweder nur

töten
kill $processid /dev/null 2>&1 

oder erste Überprüfung, ob der processid könnte (sehr unwahrscheinlich) durch einen anderen Prozess wiederverwendet werden (oder eine andere Art und Weise verwenden, um zu überprüfen, ob Ihre JVM beendet ist, vielleicht eine Datei das zeigt dies von Ihrem Java-Programm an) und dann, wenn es übereinstimmt, verwenden Sie den Kill.

ps -ef|grep -w $processid |grep -w java > /dev/null 

Wenn es Return hat null dann weiter mit dem Tötungs

test $? -eq 0 && kill $processid 

ich in der Regel würde darauf vertrauen, dass die processid entweder meine JVM ist oder gar nicht

+0

Netter Vorschlag. Ich werde das Büro in der nächsten Stunde erreichen. Wird definitiv einen Scheck machen. – RishuA

+0

Ich habe deinen Vorschlag ausprobiert. Ich habe einen Zweifel. $! erfasst die PID, nachdem der Befehl ausgeführt wurde. Angenommen, die vom Hintergrund erfasste PID ist nicht verfügbar und der neue Prozess (Waisen) bleibt bestehen. Wie man diese Situation anpackt. Ist das gut ./stopServer.sh JVM &>/somelocation; schlafen 120; PID = 'ps -ef | grep $ JVM | grep -v grep | awk '{print $ 2}' '; if [[""! = "$ PID"]] dann kill -9 $ PID fi – RishuA

+0

hmm, von deinem websphere-tag hatte ich fast erwartet, dass die dinge, die du startest, vielleicht nicht der eigentliche prozess sind, den du willst töten. also spuckt Ihr stopServer.sh ein Java und das endet nicht nach 2 min?Vielleicht hat es Arbeit beim Stoppen? Haben Sie IBM-Dokumente dazu überprüft? –

Verwandte Themen