Mantenha Sessões SSH em execução após a desconexão

197

Eu às vezes tenho processos longos que quero iniciar antes de ir para casa, então eu crio uma sessão SSH para o servidor iniciar o processo, mas depois eu quero fechar meu laptop e ir para casa e depois, depois do jantar, Quero verificar 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, eliminando assim o processo de execução demorada.

    
por λ Jonas Gorauskas 14.08.2010 / 02:15

8 respostas

195

Use nohup para fazer seu processo ignorar o sinal de desligamento:

$ nohup long-running-process &
$ exit
    
por 14.08.2010 / 07:00
138

Você quer estar usando o GNU Screen. É super incrível!

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

CTRL + a , d para separar da sua sessão de tela

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

Quando você voltar ao seu laptop:

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

Então confira o progresso do seu processo de longa duração!

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

  • CTRL + a , c para criar uma nova janela
  • CTRL + a , n para mudar para a janela seguinte 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 de vários sistemas diferentes, pode ter se deixado acidentalmente ligado a uma sessão de tela ativa em um computador diferente. Por esse motivo, eu sempre retomei com screen -d -r para garantir que, se outro shell fosse anexado à minha sessão de tela, ele seria desanexado antes de continuar no meu sistema atual.
por 14.08.2010 / 03:04
40

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

  1. Se o seu processo estiver sendo executado em segundo plano: goto # 3, else: Ctrl-Z para suspender o processo de primeiro plano. Isso reportará o trabalho # do processo suspenso, por exemplo:

    [1]+  Stopped                 processName
    
  2. Envie processName para o segundo plano com bg %1 (usando o que quer que o trabalho # esteja seguindo o % ). Isso irá retomar processName em segundo plano.

  3. Desafiar processName com disown %1 ou disown PID . Use o sinal -h se você quiser manter a propriedade até terminar seu shell atual.

por 30.10.2011 / 17:19
14

O que você quer usar é a tela ou, melhor ainda, um invólucro amigável ao usuário chamado byobu.

A tela

permite que você execute várias sessões de terminal virtuais na mesma sessão ssh. Um tutorial e páginas de ajuda estão disponíveis.

byobu é um wrapper que permite abrir facilmente novas telas com uma função simples chave em vez de combinação de teclas de ctrl-a. Ele 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 ficar ativa enquanto a conexão do ssh é desconectada. Você acabou de se conectar novamente via ssh e chamar byobu e tudo é como antes.

Por fim, algumas capturas de tela do byobu

    
por 14.08.2010 / 09:00
8

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.

    
por 15.08.2010 / 11:11
3

A velha questão, ainda estranha ninguém aconselhou tmux , que atua como um invólucro para n consoles e mantê-los abertos até que seja necessário. Isso permite mais controle, além de várias funções que o tmux possui. É fácil gerenciá-lo, você apenas executa o tmux, que traz seu shell, inicia o seu trabalho, depois aperta 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, massa de vidraceiro. Depois do 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 é dividir painel: ctrl+b e, em seguida, pressione " . Para mudar de um painel para outro, ctrl+b e, em seguida, pressione a seta para cima / para baixo.

    
por 13.11.2015 / 16:16
3

Você pode encontrar um bom guia aqui: Mantenha sua sessão SSH funcionando quando você se desconecta

sudo apt-get install screen

Agora você pode iniciar uma nova sessão de tela apenas digitando a tela na linha de comando. Você verá algumas informações sobre a tela. Pressione Enter e você estará no 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 se reconectar a uma sessão já em execução

screen -r

Para se reconectar a uma sessão existente ou criar uma nova, se nenhuma existir

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 de 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

    
por 22.12.2016 / 06:56
1

Eu uso o NX NoMachine, que é grátis para mim porque é só eu. Essencialmente, ele executa uma sessão X no servidor à qual você pode se conectar e desconectar várias vezes. A sessão X continua funcionando quando você não está conectado. Conexões podem ser feitas de qualquer lugar. Você pode escolher entre janelas flutuantes ou uma única janela contendo uma área de trabalho inteira (por exemplo, uma área de trabalho completa do Gnome). O cliente (que você executaria em seu laptop) pode ser executado no Linux, MacOS, Solaris ou Microsoft Windows. No último caso, se você escolher janelas flutuantes, elas aparecerão individualmente na barra de tarefas do Windows.

Eu uso meu laptop com Windows XP (que eu preciso de alguns hardwares específicos para Windows) como front-end para meus dois servidores Linux que usam o NX Nomachine. Eu posso até imprimir na impressora conectada ao meu laptop Windows do Linux.

    
por 30.10.2011 / 06:04