Fala, galera!
Tudo bem com vocês?
Estava pensando em uma forma em que eu pudesse escrever mais postagens, então decidi criar uma categoria de postagens mais enxutas e práticas.
Creio que dessa maneira, poderei contribuir com mais material.
Essa será a primeira postagem da categoria drops, e nela iremos criar um script Python como um serviço, fazendo nosso script rodar em background.
Pre-requisitos
Para criar um script Python como um serviço, utilizaremos a biblioteca “service”, então, basta dar um “pip install service” no console.
Você pode localizar a documentação no link abaixo:
Codificação
Para o código, criei uma função simples que herda de service.
Dentro dela, criei a função “processar”, para ser acessada via linha de comando.
Veja como ficou:
import logging
import time
from service import Service
logging.basicConfig(level=logging.INFO, format='%(asctime)s:%(levelname)s:%(message)s')
class PyAAS(Service):
def __init__(self, *args, **kwargs):
super(PyAAS, self).__init__(*args, **kwargs)
def run(self):
while not self.got_sigterm():
logging.debug(f"Serviço ativo PID: {self.get_pid()}")
time.sleep(5)
def processar(self):
logging.info('Iniciando processamento...')
for i in range(10):
print(f'Processando {i}')
logging.info('Processamento concluido!!!')
Devemos sobrescrever a classe “run”, ela é a classe principal, responsável por executar nosso script em background.
Utilização
Para realizar o controle, eu criei a implementação abaixo:
import logging
import time
from service import Service
logging.basicConfig(level=logging.INFO, format='%(asctime)s:%(levelname)s:%(message)s')
class PyAAS(Service):
def __init__(self, *args, **kwargs):
super(PyAAS, self).__init__(*args, **kwargs)
def run(self):
while not self.got_sigterm():
logging.debug(f"Serviço ativo PID: {self.get_pid()}")
time.sleep(5)
def processar(self):
logging.info('Iniciando processamento...')
for i in range(10):
print(f'Processando {i}')
logging.info('Processamento concluido!!!')
if __name__ == '__main__':
import sys
if len(sys.argv) != 2:
logging.error(f"Erro de sintaxe: {sys.argv[1]} ")
sys.exit()
cmd = sys.argv[1].lower()
service = PyAAS('python-as-a-service', pid_dir='/tmp')
if cmd == 'start':
service.start()
logging.info('Iniciando o serviço...')
elif cmd == 'stop':
service.stop()
elif cmd == 'processar':
service.processar()
elif cmd == 'status':
if service.is_running():
logging.info("O serviço está rodando.")
else:
logging.info("O serviço não está rodando")
else:
logging.error(f'Não foi possivel localizar o comando: {cmd}')
sys.exit()
Com isso, iremos passar argumentos para nosso script, e ele irá executar as instruções.
Nosso primeiro comando é o “start” para iniciarmos o processo:
Podemos confirmar que o processo está rodando com o comando “status”:
Agora, podemos pedir o processamento, com o comando “processar”.
Feito o processamento, podemos parar nosso processo, com o comando “stop” e confirmar se o serviço está rodando com o comando “status”.
Conclusão
Essa é uma maneira bem simples de utilizar um script Python como um serviço rodando em background.
Espero que essa postagem ajude com esse ponto!
Um abraço!
🙂