Digamos que eu inicie vários processos de uma sessão ssh. É possível encerrar a sessão ssh mantendo esses processos em execução na máquina remota?
Digamos que eu inicie vários processos de uma sessão ssh. É possível encerrar a sessão ssh mantendo esses processos em execução na máquina remota?
Você deve procurar alternativas modernas como
tmux
.tmux
é superior ascreen
por muitas razões, aqui estão apenas alguns exemplos:Funcionalidade básica
Para obter a mesma funcionalidade explicada na resposta recomendando
screen
, você precisaria fazer o seguinte:tmux
digitandotmux
no shelltmux
inicie o processo que você deseja dentro da sessão iniciadatmux
sessão digitando Ctrl+ be depoisdAgora você pode fazer logoff com segurança da máquina remota, seu processo continuará sendo executado dentro do
tmux
. Quando você voltar novamente e quiser verificar o status do seu processo, poderá usartmux attach
para anexar à suatmux
sessão.Se você deseja ter várias sessões em execução lado a lado, deve nomear cada sessão usando Ctrl+ be
$
. Você pode obter uma lista das sessões em execução usandotmux list-sessions
ou simplesmentetmux ls
, agora anexar a uma sessão em execução com o comandotmux attach-session -t <session-name>
.tmux
pode fazer coisas muito mais avançadas do que lidar com uma única janela em uma única sessão. Para obter mais informações, consulteman tmux
ou a página do tmux no GitHub . Em particular, aqui está um FAQ sobre as principais diferenças entrescreen
etmux
.Opção 1:
nohup
A melhor maneira é muitas vezes a mais simples.
Foi feito especificamente para isso, até registra stdout para
nohup.log
.Opção 2:
bg
+disown
Se você quiser "fundo" tarefas já em execução, então Ctrl+ Ze execute
bg
para colocar sua tarefa suspensa mais recente em segundo plano, permitindo que ela continue em execução.disown
manterá o processo em execução após o logout. O-h
sinalizador impede o desligamento.screen
e outros podem fazê-lo, mas não é para isso que servem. Eu recomendonohup
para tarefas que você sabe que vai deixar para trás ebg
para tarefas que você já está executando e não deseja reiniciar.Tenha em mente que ambos são específicos do bash. Se você não estiver usando o bash, os comandos podem ser diferentes.
Você poderia fazer isso usando
screen
.Digite
man screen
para saber mais ou leia esta página de manual da tela .Cenário simples:
ssh em sua caixa remota. Digite
screen
Em seguida, inicie o processo desejado.Pressione Ctrl- Aentão Ctrl- D. Isso "desanexará" sua sessão de tela, mas deixará seus processos em execução. Agora você pode sair da caixa remota.
Se você quiser voltar mais tarde, faça logon novamente e digite
screen -r
Isso "retomará" sua sessão de tela e você poderá ver a saída do seu processo.Screen e nohup é a melhor maneira, mas se você tiver que desanexar um processo já em execução sem screen ou nohup, você pode executar o comando disown.
Com disown você pode fechar o terminal e fazer o processo rodar na máquina.
Eu estava preso em um mv grande, então não estava em condições de parar o processo, configurar a tela e iniciá-lo novamente. Consegui sair da sessão SSH com o processo em execução executando essencialmente as seguintes etapas:
ssh user@host
bg
para colocar o processo pausado em segundo plano e retomá-lo.disown [pid]
(ID do processo é opcional, o padrão é o último processo) para negar o processo. Para obter uma lista de trabalhos basta digitarjobs
antes.logout
.Uso do
disown
comando:Existem dois programas principais que você pode usar para manter os programas e o estado do terminal em várias conexões ssh. Eles são screen (o titular, mas infelizmente sem manutenção. Aparentemente sendo desenvolvido ativamente agora ) e tmux (mais recente, mantido ativamente). Byobu é um front-end que pode ser executado em cima desses sistemas e oferecer informações adicionais de status do Ubuntu. Em novas instalações ele usará o tmux como backend, se você tiver uma instalação mais antiga do byobu e uma configuração existente ele manterá o backend anterior, seja screen ou tmux.
Byobu
Byobu pode ser instalado no computador fazendo isso em uma máquina baseada em Debian:
Usando yum, você faz
Também é possível instalar o byobu em outras distribuições.
Usando byobu
Você pode iniciar o byobu executando
byobu
na máquina host após conectar usando ssh. Isso lhe dará um shell que se parece com isso:Você também pode usar o Byobu Terminal em uma máquina Ubuntu com a opção -X e facilmente ter um byobu funcionando perfeitamente.
Uso:
Inicie o byobu digitando
byobu
.Você pode pressionar F2 para criar uma nova janela dentro da sessão atual, F3-F4 para alternar entre as várias janelas.
A melhor parte do byobu é que você não precisa realmente matar os processos em execução no terminal para sair do terminal. Você pode simplesmente enviar screen/tmux (o esqueleto do byobu) para segundo plano e retomar na próxima vez que vier:
Para sair do byobu e mantê-lo funcionando (desanexar), pressione F6.
A próxima vez que você vier, apenas faça
byobu
e você deve estar de volta exatamente onde estava.Você também pode criar várias sessões de byobu
byobu -S session1
e assim por diante. E você pode se conectar a qualquer um deles quando voltar.Você pode fazer muito mais usando Byobu. Use-o! Alguns guias definitivos estão aqui , ou aqui .
Você não pode fazer isso depois que o processo for iniciado, você precisa configurar as coisas antes de executar um trabalho de longa duração.
Você pode usar nohup, mas a sabedoria moderna sugere que você use screen ou byobu como seu login para que você possa desanexar e deixar as coisas funcionando.
A tela tem a vantagem de que você pode desconectar de uma máquina e reconectar de outra, o que é útil se você deseja verificar processos de longa execução que são executados além do final do dia de trabalho.
Há um guia de introdução razoável para tela aqui.
byobu coloca uma interface fácil de usar no topo da tela com menus etc. É também a implementação atual da tela no Ubuntu mais recente. F2 para iniciar um novo terminal F3/F4 para alternar para frente e para trás e F6 para desconectar. Digite exit para encerrar os terminais permanentemente.
Para um único script de shell executado por um longo período de tempo, farei o login e executarei o processo em segundo plano usando '&'.
Exemplo:
Saí e desconectei minha sessão SSH. Quando faço login algum tempo depois, o script ainda está em execução, conforme comprovado pela coleta contínua de dados do script.
Ei, enquanto eu concordei que a tela é a opção mais eficaz. Você pode usar o vncserver e iniciar o processo nele.
Além disso, se o seu único interesse é ter o processo em execução e não precisar assumir o controle dele, e o mais importante, você não sabia que precisará fechar a sessão e já tem o processo em execução, não terá sorte se você usou o bash como shell
Primeiro você precisa enviar o processo para segundo plano digitando Ctrl+Z seguido de bg %1 (o número depende do número do trabalho, geralmente é 1, mas você pode facilmente puxar a lista usando o comando jobs)
Por fim, invoque o comando disown (seguido pelo jobid ... o mesmo que com o comando bg)
Isso removerá o relacionamento pai-filho entre seu shell e o processo em segundo plano, evitando que ele morra quando seu shell for encerrado.
A maneira mais fácil é executar seu comando em segundo plano com
&
. Depois é só escrever: