All for Joomla All for Webmasters
Python

Daemonize: executando um script em Python como um daemon

Em sistemas operacionais, um daemon é um programa que é executado em background, em oposição aos programas que interagem diretamente com o usuário. Como exemplos, em sistemas UNIX, temos o syslogd (responsável por logs do sistema) e o sshd (responsável por receber conexões remotas do protocolo SSH) – observe que ambos os processos são terminados na letra d para indicar o seu modo de execução. Geralmente são processos que executam serviços de tempo de vida indeterminado e autônomos em sua execução e que, portanto, não precisam estar em evidência para o usuário.

No meu post onde demonstrei como implementar um bot para coleta de pontos no Gokano com o Mechanize, sugeri ao final daemonizar o algoritmo implementado. Para esse tipo de aplicação, ganha-se a facilidade de não necessitar ficar com o terminal aberto durante a execução do programa, uma vez que o algoritmo consiste de uma rotina em loop por tempo indeterminado e exigiria a linha de comando do console durante todo o andamento. Seria ainda mais vantajoso executar esse script daemonizado em um servidor em nuvem (como uma máquina da EC2 da Amazon, por exemplo) através de uma conexão remota SSH. Dessa forma, o script é executado em uma máquina de disponibilidade maior do que um computador pessoal, sem a necessidade de manter a conexão remota aberta.

Em Python, existem algumas opções de biblioteca para auxiliar nessa tarefa de executar o script em background. Em meus testes, a que se mostrou mais eficaz foi o daemonize, que exige poucas linhas de código para sua configuração e execução. O daemonize pode ser facilmente obtido através do PIP:

Após a instalação do pacote, algumas linhas de código precisam ser acrescentadas ao código original:

O CÓDIGO-FONTE

Para executar o programa como daemon, é necessário que o algoritmo esteja englobado em uma rotina principal. A função de daemonize toma então três argumentos: o nome da aplicação, o ID do processo (definido no início do algoritmo na pasta temporária do UNIX) e o método que vai ser executado (main). Você pode executar o algoritmo normalmente como qualquer script python. Para verificar sua execução, você pode checar através da lista de processos:

Assim, se desejar finalizar sua execução, pode executar o comando para terminar processo, juntamente com o número de processo do daemon do script:

Além do script de coleta de pontos do Gokano, outro exemplo de aplicação semelhante seria daemonizar um coletor de tweets que roda como um serviço e persiste esses tweets em um banco de dados, por exemplo. A ideia pode ser estendida a qualquer algoritmo com essa característica autônoma de execução, sem interação com o usuário. Quaisquer dúvidas ou sugestões, utilize o campo de comentários ou entre em contato!

Você Também Pode Gostar

3 Comentários

  • Responder
    Sannytet
    11 de dezembro de 2018 at 21:41

    Nice posts! 🙂
    ___
    Sanny

  • Responder
    Paulo Vaz
    8 de Março de 2020 at 01:34

    Primeiramente parabéns, gostaria de saber alguma forma se o script parou de funcionar por algum motivo reinicie novamente. tem como? ou deveria fazer por outro script?

  • Deixe uma resposta para Paulo Vaz Cancelar Resposta