Wie kann ich eine Java-Batch-Anwendung (eine .jar-Anwendung) auf einem Linux-Rechner korrekt im Hintergrund ausführen?

Wie kann ich eine Java-Batch-Anwendung (eine .jar-Anwendung) auf einem Linux-Rechner korrekt im Hintergrund ausführen?

Ich bin kein Systemingenieur (ich bin Softwareentwickler). Ich muss eine Java-Anwendung ausführen (eine ausführbare.KrugDatei) auf einem Linux-Rechner (Centos 7). Ich verbinde mich über SSH mit einer Shell. Diese Anwendung ist inKrugFormatieren und implementieren Sie eine Batch-Anwendung und enthalten Sie deren Scheduler.

Ich muss es im Hintergrund auf einem Remote-Server ausführen, damit es weiterhin ausgeführt wird, nachdem ich die Shell beende.

Ich habe diesen Befehl ausgeführt, um meine Anwendung im Hintergrund auszuführen:

java -Xms256m -Xmx1024m -jar UpdateInfoBatch-0.0.1-SNAPSHOT.jar &

dann klickte ich aufSTRG+Cauf meiner Tastatur, um die Tastatureingabeaufforderung auf meiner Shell wieder zu erhalten.

und hier das erste seltsame Verhalten: Ich erhalte wieder die Shell-Eingabeaufforderung und die Möglichkeit, Befehle einzugeben, aber wenn die Anwendung etwas protokolliert, wird es in der Shell angezeigt. Warum? Ich hatte erwartet, dass meine Anwendung weiterhin im Hintergrund läuft.

Wie dem auch sei, ich führe jetzt diesen Befehl in meiner Shell aus, um zu prüfen, ob meine Anwendung läuft:

[email protected] [~/zzz-import-data-batch]# ps aux | grep java
xxx 23307 15.3  1.6 4871172 418980 pts/0  Sl   10:23   0:22 java -Xms256m -Xmx1024m -jar UpdateInfoBatch-0.0.1-SNAPSHOT.jar
webadmin 23522  0.0  0.0 112812   980 pts/0    S+   10:25   0:00 grep --color=auto java

Und ja, meine Anwendung scheint ordnungsgemäß zu laufen (die erste).

Dann schließe ich die Verbindung zu meiner Shell, melde mich erneut an und führe den vorherigen Befehl erneut aus, erhalte jetzt jedoch Folgendes:

[email protected] [~/zzz-import-data-batch]# ps aux | grep java
xxx 23919  0.0  0.0 112812   980 pts/0    S+   10:27   0:00 grep --color=auto java

Wie Sie sehen, trenne ich danach die Verbindung zur Shell. Wenn ich mich erneut anmelde, scheint meine Batch-Anwendung nicht zu laufen (und tatsächlich läuft meine Job-Bewerbung nicht).

Was ist falsch? Was übersehe ich? Wie kann ich meine Java-JAR-Batch-Anwendung am besten im Hintergrund ausführen?

Antwort1

Sie müssen den Hintergrundjob von der Shell trennen, bevor die Shell beendet wird.

Als Sie eingegeben haben command &, hat Ihnen das System eine Job-ID zugewiesen, die wie „[1] 25177“ aussieht, wobei 1die Job-ID ist.

Sie sollten jetzt die Befehl „disown“Für das obige Beispiel wäre das:

disown 1

Oder erledigen Sie alle Jobs (da Sie nur einen haben):

disown

Weitere Informationen finden Sie beispielsweise unter Linux / Unix: disown-Befehl.

verwandte Informationen