Cronjob em Python

Anderson L Pereira
2 min readJul 29, 2023

--

Um cronjob em Python é uma tarefa agendada que é executada periodicamente em intervalos regulares ou em horários específicos. Esse tipo de agendamento é comum em tarefas de automação, processamento de dados, envio de notificações, limpeza de arquivos temporários, entre outras atividades recorrentes.

Existem várias formas de implementar um cronjob em Python. Vou apresentar dois métodos com exemplos de código: usando a biblioteca schedule e usando o módulo croniter.

  1. Utilizando a biblioteca schedule:

A biblioteca schedule é uma maneira fácil de criar cronjobs em Python e permite agendar tarefas em intervalos específicos ou em horários determinados.

import schedule
import time

def minha_tarefa():
print("Executando tarefa...")

# Agendar a tarefa para ser executada a cada minuto
schedule.every(1).minutes.do(minha_tarefa)

# Executar o cronjob indefinidamente
while True:
schedule.run_pending()
time.sleep(1)

Prós da utilização do schedule:

  • É fácil de aprender e usar.
  • Permite agendar tarefas em intervalos flexíveis.
  • Não requer privilégios de administrador para ser executado.
  • Funciona em diferentes plataformas (Windows, macOS e Linux).

Contras da utilização do schedule:

  • A execução do cronjob depende da execução contínua do script Python que contém o agendamento. Se o script for interrompido, o cronjob também será.
  • A precisão das tarefas depende da frequência de verificação do agendador (no exemplo, a verificação é feita a cada segundo).
  • A biblioteca pode não ser adequada para cenários de cronjobs muito complexos ou com múltiplas dependências.
  1. Utilizando o módulo croniter:

O croniter é uma biblioteca Python que permite calcular o próximo momento de execução com base em uma expressão de cron.

Instale no terminal "pip install croniter".

from datetime import datetime, timedelta
from croniter import croniter

# Expressão de cron para agendar a tarefa todos os dias às 8 horas da manhã
expressao_cron = "0 8 * * *"

def minha_tarefa():
print("Executando tarefa...")

# Loop para executar o cronjob indefinidamente
while True:
agendador = croniter(expressao_cron, datetime.now())
proximo_agendamento = agendador.get_next(datetime)

# Aguardar até o próximo agendamento
espera = proximo_agendamento - datetime.now()
time.sleep(espera.total_seconds())

# Executar a tarefa
minha_tarefa()

Prós da utilização do croniter:

  • Permite calcular o próximo momento de execução com base na expressão de cron.
  • Pode ser integrado a outros fluxos de trabalho ou sistemas externos de agendamento.
  • Não requer execução contínua do script Python após o agendamento inicial.

Contras da utilização do croniter:

  • A implementação requer um loop de espera para aguardar o próximo agendamento, o que pode ser mais complexo em cenários mais avançados.
  • Não possui recursos integrados para agendamento de tarefas em intervalos flexíveis.

Em geral, a escolha entre as bibliotecas schedule e croniter dependerá das necessidades específicas do seu projeto. Se você precisa de uma solução simples e fácil para agendar tarefas em intervalos regulares, schedule pode ser mais adequado. Por outro lado, se você precisa calcular o próximo momento de execução com base em uma expressão de cron complexa ou integrar a lógica de agendamento com outros sistemas, o croniter pode ser a melhor escolha.

É importante considerar também as ferramentas de agendamento fornecidas pelo sistema operacional (por exemplo, crontab no Linux) para cronjobs mais avançados ou que precisem ser executados independentemente de um script Python em execução contínua.

--

--