Use o pacote python-daemon ou use daemontools .
Veja também Gerenciamento de processos .
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?
Use o pacote python-daemon ou use daemontools .
Veja também Gerenciamento de processos .
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.
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 ]
A solução alternativa é: nohup
nohup myprogram > myprogram.log &
o supervisord funciona bem e pode ser confiado para enviar alertas sobre falhas