ti-enxame.com

Manter os processos em execução após a desconexão da sessão SSH

Às vezes, tenho processos de execução longa que quero iniciar antes de ir para casa, por isso crio uma sessão SSH no servidor para iniciar o processo, mas quero fechar meu laptop e voltar para casa e, depois do jantar, quero verifique o processo que iniciei antes de sair do trabalho. Como posso fazer isso com o SSH? Meu entendimento é que, se você interromper sua conexão SSH, também interromperá sua sessão de login no servidor, interrompendo, portanto, o longo processo de execução.

216
λ Jonas Gorauskas

Use Nohup para fazer com que seu processo ignore o sinal de interrupção:

$ Nohup long-running-process &
$ exit
217
Warren Young

Você deseja usar a GNU. É super incrível!

ssh [email protected]
screen               #start a screen session
run-a-long-process

CTRL+a , d para se destacar da sua sessão na tela

exit                 #disconnect from the server, while run-a-long-process continues

Quando você volta ao seu laptop:

ssh [email protected]
screen -r            #resume the screen session

Então confira o andamento do seu processo de longa execução!

screen é uma ferramenta muito abrangente e pode fazer muito mais do que eu descrevi. Enquanto estiver em uma sessão de tela, tente ctrl + a ,? para aprender alguns comandos comuns. Provavelmente os mais comuns são:

  • CTRL+a , c criar uma nova janela
  • CTRL+a , n para mudar para a próxima janela na sua sessão de tela
  • CTRL+a , p para mudar para a janela anterior na sua sessão de tela
  • se você fizer login a partir de vários sistemas diferentes, pode ter se deixado acidentalmente conectado a uma sessão de tela ativa em um computador diferente. por esse motivo, eu sempre recomeço com screen -d -r para garantir que, se outro Shell estiver conectado à minha sessão de tela, ele será desanexado antes de eu continuar no meu sistema atual.
143
Sandy

Se você não planejou com antecedência e configurou screen, etc., faça o seguinte:

  1. Se o seu processo estiver em execução em segundo plano: vá para o 3, caso contrário: Ctrl-Z para suspender o processo em primeiro plano. Isso informará o número da tarefa do processo suspenso, por exemplo:

    [1]+  Stopped                 processName
    
  2. Envie processName para segundo plano com bg %1 (usando o número da tarefa que está seguindo o %). Isso será retomado processName em segundo plano.

  3. DisownprocessName com disown %1 ou disown PID. Use o -h sinalize se você deseja manter a propriedade até encerrar seu Shell atual.

42
Mike Covington

O que você deseja usar é a tela ou, melhor ainda, um invólucro fácil de usar na tela chamado byobu.

Tela permite executar várias sessões de terminal virtual na mesma sessão ssh. A tutorial e páginas de ajuda estão disponíveis.

byob é um invólucro que permite abrir facilmente novas telas com uma simples tecla de função em vez da combinação de teclas de ctrl-a. Também mostra uma linha de status com todos os terminais virtuais abertos que podem ser nomeados.

Outro recurso interessante é o fato de que toda a tela pode permanecer ativa enquanto a conexão ssh estiver desconectada. Você acabou de se conectar novamente via ssh e chamar byobu e tudo está como antes.

Finalmente alguns screenshots do byobu.

15
txwikinger

Pode valer a pena notar que

ssh -t lala screen -rxU moo será anexado à sessão moo no Host lala

ssh -t lala screen -S moo criará a sessão moo no Host lala

e

ssh -t lala screen -S moo quux criará a sessão moo no Host lala e executará o programa quux, encerrando a sessão após a conclusão.

9
cjac

Você pode encontrar um bom guia aqui: Mantenha sua sessão SSH em execução quando você se desconectar

Sudo apt-get install screen

Agora você pode iniciar uma nova sessão de tela digitando a tela na linha de comando. Você verá algumas informações sobre a tela. Pressione Enter e você estará em um prompt normal.

Para desconectar (mas deixar a sessão em execução) Pressione Ctrl + A e depois Ctrl + D em sucessão imediata. Você verá a mensagem [desanexada]

Para reconectar-se a uma sessão já em execução

screen -r

Para reconectar-se a uma sessão existente ou criar uma nova, se não houver nenhuma

screen -D -r

Para criar uma nova janela dentro de uma sessão de tela em execução Pressione Ctrl + A e depois C em sucessão imediata. Você verá um novo prompt.

Para alternar de uma janela da tela para outra Pressione Ctrl + A e depois Ctrl + A em sucessão imediata.

Para listar janelas de tela aberta Pressione Ctrl + A e depois W em sucessão imediata

4
Victor Hugo Arango A.

Pergunta antiga, estranha ainda ninguém aconselhou tmux , que atua como um invólucro para n consoles e os mantém abertos até a necessidade. Isso permite mais controle, além de várias funções que o tmux possui. É fácil gerenciá-lo, basta executar o tmux, que o leva ao Shell, iniciar seu trabalho mais demorado e pressionar ctrl + b seguido de d (desanexar) (ctrl+b é o "ok google" do tmux e d é o comando para fechar sem sair do Shell). Isso realmente funciona se você apenas fechar, por exemplo, o PuTTY. Após o jantar, quando você se conectar novamente, poderá reabrir o tmux com tmux attach para ver sua tela exatamente como você saiu. Algo que eu amo está dividindo o painel: ctrl+b e depois pressione ". Para mudar de um painel para outro, ctrl+b e, em seguida, pressione a seta para cima/para baixo.

4
nnsense

Eu uso o NX NoMachine, que é gratuito para mim porque sou apenas eu. Essencialmente, ele executa uma sessão X no servidor à qual você pode se conectar e desconectar repetidamente. A sessão X continua em execução quando você não está conectado. As conexões podem ser feitas de qualquer lugar. Você pode escolher entre janelas flutuantes ou uma única janela contendo toda a área de trabalho (por exemplo, uma área de trabalho completa do Gnome). O cliente (que você executaria no seu laptop) pode ser executado no Linux, MacOS, Solaris ou Microsoft Windows. Neste último caso, se você escolher janelas flutuantes, elas aparecerão individualmente na barra de tarefas do Windows.

Eu uso meu Windows XP laptop (que eu preciso para determinado hardware específico do Windows)) como front-end para meus dois servidores Linux usando o NX Nomachine. Posso até imprimir na impressora conectada ao meu laptop Windows do Linux.

2
Rob_before_edits

O Tmux é uma boa opção disponível para executar seus processos de longa execução em segundo plano.

Eu tenho que continuar executando os processos de longa execução na instância/servidor de uma plataforma do Google Cloud VM/servidor (com OS: Ubuntu 16.0). Onde eu tenho que iniciar o terminal SSH e a partir do terminal, eu tenho para manter o terminal conectado para executar o processo. Agora, tudo está bem, mas espere se a conexão com o meu terminal SSH for encerrada, os processos de longa duração serão interrompidos imediatamente e, portanto, tenho que executá-los novamente mais uma vez. o terminal ssh é reiniciado ou a partir de um novo terminal ssh.

Acho que tmux é a boa solução para evitar o término dos processos que queremos executar, mesmo após o fechamento do terminal.

Multiplexador de terminal (tmux) para iniciar a sessão tmux:

  1. Iniciar o terminal ssh
  2. Digite tmux. Ele abrirá uma janela no mesmo terminal.
  3. Execute o comando para iniciar processos de longa execução na sessão tmux.

Agora, mesmo que o terminal SSH seja fechado/finalizado repentinamente, a sessão tmux continuará executando os processos iniciados pela instância/servidor.

Se a conexão foi encerrada, como reconectá-la para ver os processos em execução na sessão tmux em segundo plano:

  1. reconecte ou abra o novo terminal ssh. Para ver esse processo (que é mantido em execução em segundo plano), digite: tmux attach comando.

Deseja encerrar a sessão do tmux:

  1. Pare o processo. Então digite exit em tmux-terminal-window.

(Observe que: se usarmos tmux detach comando: ele sairá da janela/terminal da sessão do tmux sem terminar/parar as sessões do tmux)

Para mais detalhes, consulte o seguinte artigo:

  1. https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/
  2. https://limitlessdatascience.wordpress.com/2019/08/22/tmux-to-keep-jupyter-notebook-running-in-the-background/
1
Yogesh