Manter um aplicativo Java em execução quando o SSH é fechado no Google Cloud

12

No momento, estou executando um aplicativo Java por SSH para uma VM no Google Cloud Compute. Emito um comando para executar o aplicativo e ele carrega um console. Assim que eu encerro a conexão SSH, o aplicativo é encerrado. Presumo que isso ocorre porque o console foi fechado.

Gostaria que esse aplicativo (que é um servidor) persista após o término do SSH e, a qualquer momento, gostaria de me reconectar ao console e emitir comandos no servidor.

Noahb32
fonte

Respostas:

14

Você afirma isso:

Gostaria que esse aplicativo (que é um servidor) persista após o término do SSH e, a qualquer momento, gostaria de me reconectar ao console e emitir comandos no servidor.

Um pouco vagos nos gols, mas vou tentar!

Para executar qualquer comando como um processo em segundo plano em um servidor Linux, você deve anexar o comando com nohupe anexar &ao final.

Portanto, o comando final seria:

nohup [your command] &

Os nohupmeios pelos quais o comando deve ignorar "desligamentos" e o "e comercial" &anexado a ele são um comando shell que instrui o sistema a executar o comando como processo em segundo plano. Mais informações sobre seu uso podem ser encontradas aqui .

Quando você executa um comando como este, o processo será executado, você será enviado de volta ao prompt de comando e poderá sair da sessão do terminal ou até mesmo fazer outra coisa não relacionada a esse comando durante a sessão do terminal.

JakeGould
fonte
11
Se eu quiser retornar ao processo e inserir um comando no console java, como eu faria isso?
Noahb32 6/06
11
@ Noahb32 Bem, isso o lançaria como um processo em segundo plano; Geralmente uso esse método para iniciar um processo e depois esquecê-lo. Se você quisesse iniciar um novo console Java, poderia fazer isso desde que voltou ao shell. Mas talvez você deva investigar o uso, screenpois ele permite que você volte à sessão após o lançamento. Honestamente, sua pergunta é muito vaga; portanto, se você puder esclarecer, isso pode ajudar a esclarecer as coisas.
precisa saber é o seguinte
11
Obrigado! Gostaria de acrescentar que você pode monitorar a saída de outro terminal: basta executar tail -f nohup.outo mesmo trabalho. dir.
NaXa
3

Existem pelo menos três maneiras de fazer isso: nohup('não desligue'), screen/ tmux, ou disown. É um pouco incerto a sua pergunta sobre sua necessidade de conectar-se ao servidor e interagir com o daemon após a desconexão.

Se for esse o caso, nohupe disownnão serão boas correspondências à medida que você libera o processo (embora ele continue em execução). tmux(e também screen) manterá um termo válido mesmo quando você.

Para mais informações, você pode ver as respectivas páginas:

man nohup
man tux

Bash rejeitado (supondo que você esteja executando o Bash, embora muitos outros shell incluam algo semelhante)

user1794469
fonte
Parece que não há nenhum disowncomando no Google Cloud, pelo menos a instância que estou usando, iniciada em 2019 ou final de 2018. O nohupcomando funciona bem, mas cria um arquivo extra que pode não ser desejado.
trysis
1

Para desanexar um aplicativo de seu shell em execução, fazendo-o persistir após a saída do shell, use o nohupcomando

Você simplesmente prefixa seu comando normal nohupe ele deve funcionar.

Julie Pelletier
fonte
0

Além disso, se o nohub não estiver funcionando, você pode usar a tela :

 ssh into your remote box. 

type screen Então inicie o processo que você deseja.

Press Ctrl-A then Ctrl-D. 

Isso desanexará sua sessão de tela, mas deixará seus processos em execução. Agora você pode sair da caixa 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

do

seu processo.

bluejayke
fonte