Iniciou uma aplicação através de SSH, linha de comando agora desapareceu, o que acontece a seguir?

1

Contexto: Esta é uma pergunta muito básica

Usando o Putty e o SSH pela primeira vez para executar uma configuração séria do servidor e para a situação em que iniciei um processo que não quero interromper.

O processo é o gunicorn Servidor HTTP WSGI (executado no Centos 6.3).

O comando que usei para iniciar o processo é (de acordo com o início rápido ):

gunicorn -w 4 myapp:app

Neste ponto da sessão de trabalho, perdi o prompt de comando. Isso deve ser um problema que não entra nem na consciência de um usuário experiente. Mas infelizmente no meu nível de experiência, tenho várias questões fundamentais:

  • O fato de eu ter perdido o prompt de comando significa que o processo ainda está em execução?
  • Como eu volto ao prompt de comando sem matar o processo?
  • Como faço para voltar e monitorar o processo mais tarde?
  • Como acabo matando o processo?

Qualquer ajuda é apreciada, muito obrigado!

    
por Chris Dutrow 12.10.2012 / 14:30

5 respostas

2

Você poderia usar

nohup gunicorn -w 4 myapp:app &> /dev/null &

Isso vai

  • execute gunicorn -w 4
  • envia o processo para segundo plano - esse é o & no final. Você pode visualizar trabalhos em segundo plano via jobs e trazê-los para o primeiro plano via fg $id se eles, por exemplo, espera pela interação
  • silencie o processo redirecionando o erro padrão e a saída padrão para /dev/null , para que ele não seja exibido no seu shell &> /dev/null
  • certifique-se de que o processo não será eliminado se o pai (aqui seu shell) terminar. %código%

EDITAR:

Para monitorar o programa como um todo, seria bom monitorar a saída do programa.

Portanto, podemos modificar o comando desta maneira:

O comando final ficará assim:

nohup gunicorn -w 4 myapp:app 2>&1 >~/gunicorn.log &

Para matar o processo você poderia disparar séries destes comandos:
ps aux | grep gunicorn

em seguida, identifique o PID (refiro-me a ele como >~/gunicorn.log ) do processo de gúnon e pare-o com graça:

kill $PID

ou pare-o com força:

kill -9 $PID

Você pode personalizá-lo para suas necessidades futuras.     
por 19.10.2012 / 20:32
4

Does the fact that I have lost the command prompt mean that the process is still running?

Improvável. O processo terá uma conexão com o terminal virtual do ssh, que eventualmente terminará e matará todos os processos associados a esse terminal - embora o gunicorn possa ser escrito de uma maneira que não saia quando o terminal de controle desaparecer.

How do I get back to the command prompt without killing the process?

Se o terminal ainda estiver ativo, pressione CTRL + Z para voltar ao prompt de comando, então escreva bg para colocar o gnuicorn em segundo plano (e use fg para voltar ao processo para que você possa matá-lo - por exemplo, com CTRL+C ).

Iniciá-lo como gunicorn -w 4 myapp:app & colocará o processo no fundo do shell imediatamente - embora dependendo do servidor, ele ainda possa ser eliminado quando sua sessão ssh terminar. Executar nohup gunicorn -w 4 myapp:app & garantirá que o processo seja executado mesmo quando você se desconectar. Leia a man page de nohup

Outra opção é executar o processo em um terminal que permita reconectá-lo. Isso é o que a tela GNU ou o tmux permite que você faça - efetivamente permitindo que você desconecte a sessão ssh, conecte-se novamente e reconecte a uma sessão de terminal existente.

How do I come back and monitor the process later?

Você não pode, a menos que você execute o processo dentro de uma tela GNU ou sessão tmux - nesse caso, os docs / tutoriais para tela ou tmux lhe dirão os detalhes - ou você iniciou o servidor para ser executado como um serviço / em segundo plano.

How do I eventually kill the process?

A maioria dos programas de servidor terá uma interface de gerenciamento (por exemplo, comandos que você terá que executar), e você terá que encontrar as informações relevantes na documentação.

Ou eles se integram nos procedimentos de gerenciamento de inicialização e serviço do Linux / Unix, caso em que você os gerencia como qualquer outro serviço, por exemplo, /sbin/service fooserver start /sbin/service fooserver stop em algumas distribuições linux.

Ou você tem que fazer isso manualmente. Encontre o processo executando ps -ef |grep fooserver para encontrar seu pid e o mate, kill <the pid> . Ou procure na documentação se o erver puder escrever um "arquivo pid" quando ele for iniciado, para que você possa encontrar o ID do processo nesse arquivo mais tarde.

Agora, parece que pelo menos o gunicorn tem um argumento -D, que é usado para colocar o servidor em segundo plano, desconectando-o do terminal, para que ele não seja danificado quando a conexão do ssh / putty for desconectada. Veja o link

Você terá que gerenciar / monitorar manualmente, isto é, matá-lo como eu mencionei acima, monitorá-lo através do arquivo de log que ele produz - ou qualquer aplicativo web de monitoramento integrado ou comandos que o gnuicorn possa ter.

A intenção aqui é claramente que alguém empacote o gnuicorn para uma determinada variante linux / * nix, e escreva os scripts e arquivos de configuração relevantes para integrá-lo ao gerenciamento de serviço nativo da distribuição. (por exemplo, um script padrão em /etc/init.d/ para iniciar e parar o servidor, usado em muitos linux'es)

    
por 12.10.2012 / 14:45
3

1) Sim, o processo está sendo executado.

2) Você pode iniciar o processo em segundo plano iniciando-o como

gunicorn -w 4 myapp:app &

3) Você pode encontrar o ID do processo (pid) com

ps aux | grep gunicorn

4) Para matar o processo, você pode matá-lo com

kill (the pid you found in 3)

Para forçar o processo a parar, execute

kill -9 (the pid you found in 3)
    
por 12.10.2012 / 14:34
1

Leia o comando nohup(1) para iniciar os processos em segundo plano e poder desconectar sua sessão de terminal.

    
por 12.10.2012 / 14:39
1

A partir de agora, você pode achar que a tela do gnu é bastante útil enquanto trabalha em um terminal como o putty. Ou até mesmo o melhor alternativa para a tela do gnu - tmux , que fica cada vez mais popular agora devido à sua poderosa e consistente interfaces de comando bem documentadas.

    
por 12.10.2012 / 14:54