Halten Sie eine Java-App am Laufen, wenn SSH in Google Cloud geschlossen ist

12

Im Moment starte ich eine Java-App per SSH auf einer VM in Google Cloud Compute. Ich gebe einen Befehl aus, um die App auszuführen, und sie lädt eine Konsole. Sobald ich die SSH-Verbindung beende, wird die App heruntergefahren. Ich gehe davon aus, dass die Konsole geschlossen wurde.

Ich möchte, dass diese App (die ein Server ist) nach dem Beenden von SSH bestehen bleibt, und ich möchte jederzeit in der Lage sein, die Verbindung zur Konsole wiederherzustellen und Befehle auf dem Server auszugeben.

Noahb32
quelle

Antworten:

14

Sie geben Folgendes an:

Ich möchte, dass diese App (die ein Server ist) nach dem Beenden von SSH bestehen bleibt, und ich möchte jederzeit in der Lage sein, die Verbindung zur Konsole wiederherzustellen und Befehle auf dem Server auszugeben.

Etwas vage Tore, aber ich werde es versuchen!

Um einen Befehl als Hintergrundprozess auf einem Linux-Server auszuführen, sollten Sie dem Befehl ein Präfix voranstellen nohupund &an das Ende anhängen .

Der letzte Befehl wäre also:

nohup [your command] &

Das nohupbedeutet, dass der Befehl "Auflegen" ignorieren sollte und das &angehängte kaufmännische Und ein Shell-Befehl ist, der das System anweist, den Befehl als Hintergrundprozess auszuführen. Weitere Informationen zur Verwendung finden Sie hier .

Wenn Sie einen Befehl wie diesen ausführen, wird der Prozess ausgeführt, Sie werden zur Eingabeaufforderung zurückgeschickt und Sie können die Terminalsitzung beenden oder während dieser Terminalsitzung etwas anderes tun, das nicht mit diesem Befehl zusammenhängt.

JakeGould
quelle
1
Wie würde ich das tun, wenn ich zum Prozess zurückkehren und einen Befehl in die Java-Konsole eingeben möchte?
Noahb32
1
@ Noahb32 Nun, dies würde es als Hintergrundprozess starten; Ich benutze diese Methode meistens, um einen Prozess zu starten und ihn dann zu vergessen. Wenn Sie eine neue Java-Konsole starten möchten, können Sie dies einfach tun, da Sie wieder in der Shell sind. Aber vielleicht sollten Sie screenstattdessen die Verwendung untersuchen, da Sie so nach dem Start wieder in die Sitzung zurückkehren können. Ehrlich gesagt ist Ihre Frage sehr vage. Wenn Sie sie also klären könnten, könnte dies helfen, die Dinge zu klären.
JakeGould
1
Vielen Dank! Ich möchte hinzufügen, dass Sie die Ausgabe von einem anderen Terminal aus überwachen können: Führen Sie einfach tail -f nohup.outdie gleiche Arbeit aus. dir.
NaXa
3

Es gibt mindestens drei Möglichkeiten, dies zu tun: nohup('kein Auflegen'), screen/ tmux, oder disown. Aus Ihrer Frage, ob Sie nach dem Trennen der Verbindung eine Verbindung zum Server herstellen und mit dem Dämon interagieren müssen, ist ein wenig unklar.

Wenn dies der Fall ist nohupund disownkeine guten Übereinstimmungen vorliegen, wenn Sie den Prozess freigeben (obwohl er weiterhin ausgeführt wird). tmux(und auch screen) wird einen Begriff auch dann weiterführen, wenn Sie.

Weitere Informationen finden Sie auf den jeweiligen Seiten:

man nohup
man tux

Bash disown (vorausgesetzt, Sie führen Bash aus, obwohl viele andere Shell etwas Ähnliches enthalten)

user1794469
quelle
Anscheinend gibt es disownin Google Cloud keinen Befehl, zumindest die von mir verwendete Instanz, die 2019 oder Ende 2018 gestartet wurde. Der nohupBefehl funktioniert einwandfrei, erstellt jedoch eine zusätzliche Datei, die möglicherweise nicht erwünscht ist.
Tryse
1

Verwenden Sie den nohupBefehl, um eine Anwendung von ihrer laufenden Shell zu trennen und sie nach dem Beenden der Shell beizubehalten .

Sie stellen Ihrem normalen Befehl einfach ein Präfix voran nohupund es sollte funktionieren.

Julie Pelletier
quelle
0

Auch wenn nohub nicht funktioniert, können Sie den Bildschirm verwenden :

 ssh into your remote box. 

Bildschirm eingeben Starten Sie dann den gewünschten Vorgang.

Press Ctrl-A then Ctrl-D. 

Dadurch wird Ihre Bildschirmsitzung getrennt, Ihre Prozesse werden jedoch ausgeführt. Sie können sich jetzt von der Remote-Box abmelden.

If you want to come back later, log on again and type screen -r This will resume your screen session, and you can see the output

von

Ihr Prozess.

Bluejayke
quelle