AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 8653
Accepted
Olivier Lalonde
Olivier Lalonde
Asked: 2010-10-22 04:09:13 +0800 CST2010-10-22 04:09:13 +0800 CST 2010-10-22 04:09:13 +0800 CST

Como manter os processos em execução após encerrar a sessão ssh?

  • 772

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?

ssh
  • 14 14 respostas
  • 1086414 Views

14 respostas

  • Voted
  1. Best Answer
    tongpu
    2012-11-24T01:26:10+08:002012-11-24T01:26:10+08:00

    Você deve procurar alternativas modernas como tmux.

    tmuxé superior a screenpor muitas razões, aqui estão apenas alguns exemplos:

    • O Windows pode ser movido entre as sessões e até vinculado a várias sessões
    • As janelas podem ser divididas horizontalmente e verticalmente em painéis
    • Suporte para terminais UTF-8 e 256 cores
    • As sessões podem ser controladas a partir do shell sem a necessidade de entrar em uma sessão

    Funcionalidade básica

    Para obter a mesma funcionalidade explicada na resposta recomendando screen, você precisaria fazer o seguinte:

    • ssh na máquina remota
    • comece tmuxdigitando tmuxno shell
    • tmuxinicie o processo que você deseja dentro da sessão iniciada
    • saia/separe a tmuxsessão digitando Ctrl+ be depoisd

    Agora 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á usar tmux attachpara anexar à sua tmuxsessã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 usando tmux list-sessionsou simplesmente tmux ls, agora anexar a uma sessão em execução com o comando tmux attach-session -t <session-name>.

    tmuxpode fazer coisas muito mais avançadas do que lidar com uma única janela em uma única sessão. Para obter mais informações, consulte man tmuxou a página do tmux no GitHub . Em particular, aqui está um FAQ sobre as principais diferenças entre screene tmux.

    • 1047
  2. coteyr
    2012-11-28T18:58:12+08:002012-11-28T18:58:12+08:00

    Opção 1:nohup

    A melhor maneira é muitas vezes a mais simples.

    nohup long-running-command &
    

    Foi feito especificamente para isso, até registra stdout para nohup.log.

    man nohup
    

    Opção 2: bg+disown

    ctrl+z
    bg
    disown -h
    

    Se você quiser "fundo" tarefas já em execução, então Ctrl+ Ze execute bgpara colocar sua tarefa suspensa mais recente em segundo plano, permitindo que ela continue em execução. disownmanterá o processo em execução após o logout. O -hsinalizador impede o desligamento.


    screene outros podem fazê-lo, mas não é para isso que servem. Eu recomendo nohuppara tarefas que você sabe que vai deixar para trás e bgpara 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.

    • 519
  3. Lincoln
    2010-10-22T04:20:01+08:002010-10-22T04:20:01+08:00

    Você poderia fazer isso usando screen.

    Digite man screenpara saber mais ou leia esta página de manual da tela .

    Cenário simples:

    • ssh em sua caixa remota. Digite screenEm 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 -rIsso "retomará" sua sessão de tela e você poderá ver a saída do seu processo.

    • 263
  4. bassgey
    2010-10-22T05:19:23+08:002010-10-22T05:19:23+08:00

    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.

    disown [-ar] [-h] [jobspec… |pid… ]

    Sem opções, remova cada especificação de tarefa da tabela de tarefas ativas. Se a -hopção for fornecida, o trabalho não será removido da tabela, mas será marcado para que o SIGHUP não seja enviado para o trabalho se o shell receber um SIGHUP. Se jobspec não estiver presente e nem a opção -anem a -ropção forem fornecidas, o trabalho atual será usado. Se nenhuma especificação de trabalho for fornecida, a -aopção significa remover ou marcar todos os trabalhos; a -ropção sem um argumento jobspec restringe a operação a trabalhos em execução.

    Com disown você pode fechar o terminal e fazer o processo rodar na máquina.

    • 98
  5. Chaos
    2013-11-25T19:30:49+08:002013-11-25T19:30:49+08:00

    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:

    1. Estabeleça conexão SSH:ssh user@host
    2. Execute o comando desejado para iniciar o processo
    3. Pressione Ctrl+ Zpara pausar o processo
    4. Execute bgpara colocar o processo pausado em segundo plano e retomá-lo.
    5. Executar disown [pid](ID do processo é opcional, o padrão é o último processo) para negar o processo. Para obter uma lista de trabalhos basta digitar jobsantes.
    6. Saia da sessão SSH executando logout.

    Uso do disowncomando:

    disown [-ar] [-h] [jobspec ... | pid ... ]
                  Without  options,  remove  each jobspec from the table of active
                  jobs.  If jobspec is not present, and neither the -a nor the  -r
                  option  is  supplied, the current job is used.  If the -h option
                  is given, each jobspec is not removed from  the  table,  but  is
                  marked  so  that  SIGHUP  is  not  sent  to the job if the shell
                  receives a SIGHUP.  If no jobspec is  supplied,  the  -a  option
                  means  to  remove or mark all jobs; the -r option without a job‐
                  spec argument restricts operation to running jobs.   The  return
                  value is 0 unless a jobspec does not specify a valid job.
    
    • 85
  6. SiddharthaRT
    2012-11-25T14:09:39+08:002012-11-25T14:09:39+08:00

    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:

    sudo aptitude install byobu
    

    Usando yum, você faz

    su -c 'yum install byobu'
    

    Também é possível instalar o byobu em outras distribuições.

    Usando byobu

    Você pode iniciar o byobu executando byobuna máquina host após conectar usando ssh. Isso lhe dará um shell que se parece com isso:

    imagem-byobu

    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 byobue você deve estar de volta exatamente onde estava.

      byobu-detach-attach

    Você também pode criar várias sessões de byobu byobu -S session1e 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 .

    • 28
  7. Richard Holloway
    2010-10-22T04:16:58+08:002010-10-22T04:16:58+08:00

    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.

    • 20
  8. user108430
    2014-07-30T06:58:11+08:002014-07-30T06:58:11+08:00

    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:

    /path/to/my/script &
    

    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.

    • 10
  9. Jorge Gutierrez
    2011-06-07T13:29:04+08:002011-06-07T13:29:04+08:00

    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.

    • 8
  10. Zibri
    2017-01-11T19:52:30+08:002017-01-11T19:52:30+08:00

    A maneira mais fácil é executar seu comando em segundo plano com &. Depois é só escrever:

    disown -a
    
    • 5

relate perguntas

  • Como interagir graficamente com um servidor sem cabeça?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como adicionar um diretório ao PATH?

    • 17 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Marko Smith

    Como faço para obter a temperatura da CPU?

    • 21 respostas
  • Marko Smith

    Como posso adicionar um usuário como um novo sudoer usando a linha de comando?

    • 7 respostas
  • Marko Smith

    Alterar permissões e propriedade da pasta

    • 9 respostas
  • Marko Smith

    Como você reinicia o Apache?

    • 13 respostas
  • Marko Smith

    Como posso desinstalar o software?

    • 11 respostas
  • Marko Smith

    Como os PPAs podem ser removidos?

    • 26 respostas
  • Martin Hope
    justingrif Como adicionar um diretório ao PATH? 2009-07-23 12:42:23 +0800 CST
  • Martin Hope
    NES Como habilitar ou desabilitar serviços? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    Olivier Lalonde Como manter os processos em execução após encerrar a sessão ssh? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B Como posso adicionar um usuário como um novo sudoer usando a linha de comando? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans Como removo versões antigas do kernel para limpar o menu de inicialização? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve