Como posso manter um processo ativo depois de fechar a sessão de massa?


41

Estou usando a massa para interagir com o servidor Linux. Eu iniciei um processo usando massa de vidraceiro. O processo está em execução e levará de 5 a 6 horas. Quero que esse processo continue em execução depois de fechar a sessão de massa. Como posso manter esse processo ativo depois de fechar a sessão de massa? Não quero manter o computador ligado o tempo todo. Há alguma maneira de fazer isso?.

Respostas:


32

Eu uso a tela para esse tipo de coisa. Na verdade, às vezes eu deixo por um bom tempo para voltar ao que estava fazendo.


O processo está sendo executado agora, é trabalhar para que o processo que estou perguntando porque o processo está no meio e eu não quero que reiniciá-lo agora?

+1 por mencionar minha ferramenta de linha de comando favorita indiscutível. É uma jóia em situações como esta.
Noufal Ibrahim

@Noufal, totalmente! @prakash, você precisa tela run antes de começar qualquer processo
ziya

Se você deseja se conectar a várias máquinas, pode até ser uma boa idéia executar várias telas dentro da primeira tela, para que você tenha que se conectar a uma única tela para ter acesso a todos os controles remotos em execução.

o link não funciona mais
Malky.Kid

31
^Z
bg %1
disown -h %1

O '-h' torna o processo imune ao SIGHUP quando a sessão é concluída.


3
Observe que não há como 'refutar' ou 'adotar' o processo - depois de fazer isso, você nunca poderá trazê-lo de volta ao primeiro plano. Se o processo for um trabalho em lotes, trabalhando para produzir alguns arquivos, isso não deve importar.

19

Use o nohupcomando Apenas prefixe-o ao seu comando e ele será daemonizado para que não parem quando você fizer logoff / encerrar sua sessão do shell. A saída padrão estará por padrão em um arquivo chamado nohup.out. Consulte a página do manual para nohup(1)obter mais informações.


o processo está em execução, é trabalho para esse processo? Estou perguntando, porque o processo está no meio e não quero reiniciá-lo agora?

Tarde demais ... pelo menos, para operações normais. Não seria de surpreender descobrir que, se você anexar um depurador ao processo e o ajustar com um conjunto apropriado de chamadas do sistema, talvez seja possível colocá-lo em segundo plano. Mas não é o que poderia ser recomendado - eu não me incomodaria, por exemplo, e tenho pelo menos uma idéia do que pode estar envolvido. Agora você tem duas opções ... fique conectado até que termine ou pare o processo atual e reinicie um novo usando nohup.
Jonathan Leffler

11
Se você estiver usando o bash (e acho que o zsh), poderá usar a solução e disowno processo de Tom Anderson para que ele continue a funcionar mesmo quando você se desconectar.
Noufal Ibrahim

Sim - renegar parece ser o caminho a percorrer para um trabalho já em execução. É factível porque o shell que iniciou o trabalho pode manipular as propriedades necessárias.
Jonathan Leffler

5

Inicie o processo com nohup "processname" &. Você também pode desanexá-lo com screenou tmux.


3

As soluções acima são bem descritas, no entanto, nenhuma delas funcionou para mim até que eu também editei a configuração do PuTTY para:

Ativar keepalives TCP (opção SO_KEEPALIVE)

Eu não tinha visto isso em nenhum outro lugar, e apenas o encontrei por tentativa e erro.


1

Ctrl + z Envia o processo atual para o segundo plano.

Além disso, você pode adicionar & no final do seu comando para executar em segundo plano


4
Normalmente, control-z coloca o processo em um estado de animação suspensa; o comando bg coloca em segundo plano. No entanto, isso também mantém o processo conectado ao terminal, enquanto o nohup o desconecta do terminal e, portanto, permite que a massa desconecte e o processo sobreviva à desconexão.
Jonathan Leffler

Eu descobri que o uso de 'e' para enviar para o plano de fundo funciona com massa de vidraceiro, mas quando eu conecto usando o ssh diretamente de um shell, se eu fechar a conexão, o processo em segundo plano é interrompido. Alguma idéia do porquê?
Zardoz89

0

Se você deseja que o programa contido no processo seja executado sempre ou frequentemente em segundo plano, é possível codificá-lo para separar do terminal de controle (tornar esse comportamento controlável por meio de um sinalizador de opção) e executar em segundo plano.

Essa é uma solução de longo prazo, é claro, não para o processo em execução no momento.


0

Você pode usar &após o link.

Exemplo:

[localhost ~ ]# wget http://www.link.com/download/download.zip &

A pergunta não era sobre um link, você quer dizer adicionar um &sinal após a linha de comando?
Danny

0

Como manter o weblogic em execução após fechar a janela do putty:

Etapas simples: após o login através da massa, siga as etapas abaixo:

  1. Vá para o diretório no servidor em que o startWebLogic.shcomando está localizado.
  2. Digite command screene pressione Enter(uma nova tela será aberta).
  3. Na nova tela, digite seu comando de execução ./startWebLogic.sh.
  4. Pressione Ctrl+ e adepois pressione d(sem segurar Ctrl); você retornará à tela anterior.
  5. Quando você quiser retornar à tela de log do servidor, digite command screen -r.

0

se o processo for para nodejs, e pode ser sua intenção, pois você o publicou originalmente no stackoverflow. Eu estava originalmente procurando por essa pergunta. Encontrei pm2 e é incrível. As outras respostas podem ajudar na massa geral, mas se for específico do nó, essa é de longe a melhor resposta, pois há monitoramento integrado e a configuração é simplesmente uma

$ npm install pm2 -g
$ cd yourappdirectory

"O PM2 é um gerenciador de processos de produção para aplicativos Node.js. com um balanceador de carga interno. Permite manter os aplicativos ativos para sempre, recarregá-los sem tempo de inatividade e facilitar tarefas comuns de administração do sistema.

Iniciar um aplicativo no modo de produção é tão fácil quanto: "

$ pm2 start yourappname.js

"usando o comando salvar e congelar, você ativa os processos para iniciar automaticamente na reinicialização"

$ pm2 save
$ pm2 freeze

para monitorar sua

$ pm2 monit

e reinicia

$ pm2 restart yourappname

também para informações de registro direto

$ pm2 logs

Agora eu posso executar facilmente duas janelas de massa em vez de usar a janela do navegador digialocean (na qual eu não podia rolar para cima); Para mais informações, consulte o github principal

https://github.com/Unitech/pm2

é incrível.


Você pode explicar um pouco mais sobre o que é pm2 e quais são os comandos que você mostra? Por favor, não responda nos comentários; edite  sua resposta para torná-la mais clara e completa.
G-Man Diz 'Reinstate Monica' em

Adicionado um pouco mais de documentação para a comunidade. Eu gostaria de ter encontrado pm2 anos atrás.
sasy solutions
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.