À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.
Use Nohup
para fazer com que seu processo ignore o sinal de interrupção:
$ Nohup long-running-process &
$ exit
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:
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.Se você não planejou com antecedência e configurou screen
, etc., faça o seguinte:
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
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.
DisownprocessName
com disown %1
ou disown PID
. Use o -h
sinalize se você deseja manter a propriedade até encerrar seu Shell atual.
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.
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.
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
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.
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.
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
:
tmux
. Ele abrirá uma janela no mesmo terminal.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:
tmux attach
comando.Deseja encerrar a sessão do tmux:
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: