2010-12-28 8 views
2

Ich muss ein Shell-Skript schreiben, das eine laufende .jar schließt und öffnet es im Terminal wieder. Ich habe noch nie ein Shell-Skript geschrieben und weiß nicht, wo ich anfangen soll.Ubuntu Shell-Skript Neustart jar

Hier ist der Befehl, den ich verwende, um die App im Terminal auszuführen.

java -jar '/home/fdqadmin/NetBeansProjects/dbConvert2/dist/dbConvert2.jar' --Terminal=true 

Ich benutze Ubuntu 10.04 LTS.

Antwort

1

Was passiert, wenn Sie eine laufende .jar-Datei schließen? Sie sind auf einem Un * x-System und daher ein "kill -9" ist garantiert, um den Prozess AND Freigabe alle Ressourcen, die der Prozess verwendet (oder Ihr Un * x-System ist nicht konform, aber ich habe habe nie einen gesehen).

Sobald Sie also eine Kill -9 senden, wird das Java-Programm, alle seine Threads, alles getan. Kein Herunterfahren, nichts. Es ist wie wenn du das Netzkabel gezogen hast.

Wäre ein "kill -9" eine akzeptable Möglichkeit für Sie, das laufende Java-Programm zu beenden? Wird das Java-Programm nach dem "Kill-9'-Befehl" sanft neu gestartet? (Es sollte Neustart gut, aber es ist nicht immer der Fall).

Wenn eine echte Tötungs ist in Ordnung, und wenn Sie die .jar wissen immer mit, dass Befehlszeile gestartet und wenn Sie es wissen, ist man nur so sein, .jar durch den Benutzer gestartet, konnte man so etwas:

#!/bin/bash 

kill -9 $(ps aux | grep java | grep dbConvert2 | awk '{print $2}') 
java -jar '/home/fdqadmin/NetBeansProjects/dbConvert2/dist/dbConvert2.jar' --Terminal=true 

Sie auch in Java-idiosynchratic Land gehen und „smart“ Befehl wie ‚JPS‘ benutzen, aber ich bleibe lieber mit starken Un * x-Tools, vielen dank :)

+0

Beachten Sie, dass dies nicht für den Einsatz in lebenskritischen Systemen geeignet ist. Es ist nur ein Beispiel dafür, was getan werden kann ... – SyntaxT3rr0r

+0

Dieses System stellt sicher, dass mehr als 200 Mitarbeiter arbeiten können, gibt es eine 100% todsichere Methode? – JustinY17

+1

@ JustinY17 was SpoonBender versucht zu sagen ist, dass dies Ihren Prozessstein ohne Warnung oder irgendetwas kalt stellen wird. Ich stimme ihm zu (+1 übrigens) - ein besserer Weg wäre, irgendwie eine Nachricht an dieses Programm zu schicken, damit es sich ordentlich schließt. Lassen Sie ein Skript darauf warten, und starten Sie es neu. Sie könnten etwas wie "monit" oder "nagios" betrachten, um zu überwachen, ob dieser Prozess ausgeführt wird - wenn er beendet wird, wird er neu gestartet. –

0

ich habe kommentiert Hier vor, aber hier ist ein interesting document von Developerworks auf Java Signal Handling, die von Interesse sein könnten, wenn Sie mit dieser Methode fortfahren möchten.

Ich glaube aber immer noch, dass, wie in jedem Fall, ein Prozess, der Ihrem aktuellen Codemodul fremd ist, auch wenn Sie es geschrieben haben, es über einen der vielen Interprozess-Kommunikationsmechanismen zu stoppen.