Executando o aplicativo python em segundo plano no linux

5

Pergunta estranha aqui, mas estou jogando com uma combinação de servidor / cliente de bate-papo python no meu servidor Linux. Atualmente, se eu fizer isso:

$: cd /path/to/chat/server
$: sudo python ChatServer_Listen.py

Isso inicia o loop de execução do aplicativo python e o servidor atende conexões TCP de entrada.

Meu problema é, se eu fechar minha janela de terminal, a sessão ssh é encerrada e o aplicativo python deixa de ser executado, e os clientes não podem mais se conectar. Eu prefiro não executar uma instância do terminal 24/7 localmente. Posso configurar esse aplicativo python como algo que pode ser executado em segundo plano no Linux? Se sim, como? Idealmente, seria como o Apache, que é executado como um serviço.

Obrigado por me ajudar!

    
por Justin 21.07.2012 / 03:42

5 respostas

8

Você pode usar nohup python ChatServer_Listen.py &

nohup registrará a saída do seu programa em nohup.out file.

Para interromper seu programa, você precisa usar o comando kill your_pid .

    
por 21.07.2012 / 04:47
1

Você deseja usar o Supervisor . Ele é feito exatamente para esse propósito, além de fazer coisas como reiniciar o processo se ele morrer, fornecer uma GUI baseada na web para controlá-lo, etc.

    
por 21.07.2012 / 04:42
1

Uma maneira fácil de manter um processo ativo depois de efetuar o logoff é usar a tela .

    
por 21.07.2012 / 05:45
1

Como explicado aqui:

link

"

Usando o Job Control do bash para enviar o processo para o segundo plano:

[crtl]+z

bg

E, como Sam / Jan mencionou, você deve executar a renúncia para evitar a morte do processo depois de fechar o terminal.

disown -h

"

    
por 21.07.2012 / 09:17
1

A maneira correta de fazer isso é alterar o código para daemonizar o processo corretamente. Uma maneira de fazer isso é usar o módulo daeminize .

A maneira conveniente de fazer isso, que também funciona com software que você não pode modificar, é iniciá-lo assim

nohup python ChatServer_Listen.py >logfile.txt 2>&1 </dev/null &

Note que não usei sudo . Isso é porque você deve colocar a linha acima em um shell script e rodar o shell script com o sudo.

    
por 23.07.2012 / 03:57