Mantenere in esecuzione un'app Java quando SSH è chiuso su Google Cloud


12

In questo momento sto eseguendo un'app Java tramite SSH-ing a una VM su Google Cloud Compute. Emetto un comando per eseguire l'app e carica una console. Non appena interrompo la connessione SSH, l'app si spegne. Presumo che ciò sia dovuto al fatto che la console è stata chiusa.

Vorrei che questa app (che è un server) persistesse dopo aver terminato SSH e, in qualsiasi momento, vorrei essere in grado di riconnettermi alla console ed emettere comandi sul server.


Risposte:


14

Lo dichiari:

Vorrei che questa app (che è un server) persistesse dopo aver terminato SSH e, in qualsiasi momento, vorrei essere in grado di riconnettermi alla console ed emettere comandi sul server.

Gol leggermente vaghi, ma mi prenderò un colpo!

Per eseguire qualsiasi comando come processo in background su un server Linux, è necessario anteporre il comando nohupe accodarlo &alla fine.

Quindi il comando finale sarebbe:

nohup [your command] &

Il nohupmezzo che il comando dovrebbe ignorare "hang up" e la e commerciale &allegata è un comando shell che dice al sistema di eseguire il comando come processo in background. Ulteriori informazioni sul suo utilizzo sono disponibili qui .

Quando esegui un comando come questo, il processo verrà eseguito, verrai reindirizzato al prompt dei comandi e potrai uscire dalla sessione del terminale o persino andare a fare qualcos'altro non correlato a quel comando durante quella sessione del terminale.


1
Se voglio tornare al processo e immettere un comando nella console Java, come lo farei?
Noahb32,

1
@ Noahb32 Bene, questo lo lancerebbe come processo in background; Uso principalmente questo metodo per avviare un processo e poi dimenticarlo. Se si desidera avviare una nuova console Java, è possibile farlo poiché si è di nuovo nella shell. Ma forse dovresti investigare usando screeninvece poiché ti consente di tornare alla sessione dopo il lancio. Onestamente la tua domanda è molto vaga, quindi se potessi chiarirla, questo potrebbe aiutare a chiarire le cose.
Jake:

1
Grazie! Vorrei aggiungere che è possibile monitorare l'output da un altro terminale: basta eseguire tail -f nohup.outlo stesso lavoro. dir.
naXa,

3

Esistono almeno tre modi per eseguire questa operazione: nohup('non riagganciare'), screen/ tmuxo disown. Non è chiaro dalla tua domanda in merito alla necessità di connettersi al server e interagire con il demone dopo la disconnessione.

In questo caso, nohupe disownnon sarà una buona corrispondenza mentre rilasci il processo (anche se continua a funzionare). tmux(e anche screen) manterrà un termine attivo anche quando tu.

Per maggiori informazioni puoi vedere le rispettive pagine:

man nohup
man tux

Bash disown (supponendo che tu stia eseguendo Bash, sebbene molte altre shell includano qualcosa di simile)


Sembra che non ci sia alcun disowncomando su Google Cloud, almeno l'istanza che sto usando, è iniziata nel 2019 o alla fine del 2018. Il nohupcomando funziona bene, ma crea un file extra che potrebbe non essere desiderato.
trysis

1

Per staccare un'applicazione dalla sua shell in esecuzione, facendola persistere dopo la chiusura della shell, utilizzare il nohupcomando

Devi semplicemente aggiungere il prefisso al tuo normale comando nohupe dovrebbe funzionare.


0

Inoltre, se nohub non funziona, puoi usare screen :

 ssh into your remote box. 

digitare schermo Quindi avviare il processo desiderato.

Press Ctrl-A then Ctrl-D. 

Questo distaccerà la sessione dello schermo ma lascerà i processi in esecuzione. È ora possibile disconnettersi dalla casella remota.

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

di

il tuo processo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.