Use nohup
para fazer seu processo ignorar o sinal de desligamento:
$ nohup long-running-process &
$ exit
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.
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:
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. Se você não planejou com antecedência e configurou screen
, etc., faça o seguinte:
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
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.
Desafiar processName
com disown %1
ou disown PID
. Use o sinal -h
se você quiser manter a propriedade até terminar seu shell atual.
O que você quer usar é a tela ou, melhor ainda, um invólucro amigável ao usuário chamado byobu.
A telapermite 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
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.
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.
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
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.
Tags command-line ssh process gnu-screen