Como iniciar o processo como um daemon?

3

Eu criei um serviço que consiste em um manipulador de cola de corredor python (nginx), baseado na web (nginx) (uwsgi) e meu próprio código python (fetcher). Eu fiz um script (deploy.sh) para iniciar os serviços de diferença:

nginx
uwsgi --ini inifie.ini
python fetcher.py & disown

Minha pergunta é sobre como eu inicio meu daemon python. Eu quero que ele seja executado em segundo plano. Não deve imprimir nada no meu terminal atual. Se eu adicionar chamadas "print" ao meu script fetcher, eu as vejo atualmente na janela do terminal.

Então, minha pergunta é: como faço para iniciar meu script fetcher.py como um daemon?

    
por Markus Johansson 26.10.2013 / 12:42

5 respostas

4

Use o pacote python-daemon ou use daemontools .

Veja também Gerenciamento de processos .

    
por 27.10.2013 / 03:19
2

Você quer fazer isso a partir do script de shell ou do programa Python?

Se a partir do script de shell, é bastante simples:

nohup fetcher.py >/dev/null 2>&1 </dev/null & disown

Se você quiser fazer isso a partir do programa em Python, sugiro que você procure em o módulo python-daemon , provavelmente também disponível como um pacote pré-fabricado para o seu sistema operacional similar ao Unix.

    
por 26.10.2013 / 14:33
2

Eu costumo fazer um fork como este no programa python:

if __name__ == '__main__':
    try:
        pid = os.fork()
        if pid > 0:
            sys.exit(0)
    except OSError:
        report( "unable to fork: %s" % sys.exc_info()[1])
        raise
    [program starts here ]
    
por 26.10.2013 / 18:50
1

A solução alternativa é: nohup

nohup myprogram > myprogram.log &
    
por 26.10.2013 / 13:49
0

o supervisord funciona bem e pode ser confiado para enviar alertas sobre falhas

    
por 27.10.2013 / 04:11

Tags