Automação
8 min leitura
13 MAR 2026
Como agendar tarefas com Python: schedule e cron
Execute scripts automaticamente em horários definidos com schedule e crontab.
A peça final da automação
Você já sabe manipular arquivos, fazer scraping, gerar planilhas e enviar emails. Agora falta o último passo: fazer tudo isso rodar sozinho, sem você precisar executar manualmente.
schedule: agendamento simples em Python
A biblioteca schedule é a forma mais fácil de agendar tarefas:
pip install schedule
Exemplo básico
import schedule
import time
def tarefa():
print("Executando tarefa...")
# A cada 10 segundos
schedule.every(10).seconds.do(tarefa)
# A cada 5 minutos
schedule.every(5).minutes.do(tarefa)
# Toda hora
schedule.every().hour.do(tarefa)
# Todo dia as 09:00
schedule.every().day.at("09:00").do(tarefa)
# Toda segunda-feira
schedule.every().monday.do(tarefa)
while True:
schedule.run_pending()
time.sleep(1)
O while True mantém o script rodando e verifica a cada segundo se há tarefas pendentes.
Exemplo prático: backup diário
import schedule
import time
import shutil
from pathlib import Path
from datetime import datetime
def fazer_backup():
origem = Path("dados")
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
destino = Path(f"backups/backup_{timestamp}")
shutil.copytree(origem, destino)
print(f"Backup criado: {destino}")
# Backup todo dia as 02:00
schedule.every().day.at("02:00").do(fazer_backup)
print("Agendador de backup iniciado...")
while True:
schedule.run_pending()
time.sleep(60)
Exemplo prático: monitoramento + alerta
import schedule
import time
import requests
def verificar_site():
try:
r = requests.get("https://meusite.com", timeout=10)
if r.status_code != 200:
print(f"ALERTA: site retornou {r.status_code}")
# aqui voce pode enviar email ou notificacao
else:
print(f"OK - status {r.status_code}")
except requests.RequestException as e:
print(f"ALERTA: site fora do ar - {e}")
# Verificar a cada 5 minutos
schedule.every(5).minutes.do(verificar_site)
print("Monitoramento iniciado...")
while True:
schedule.run_pending()
time.sleep(1)
Passando parâmetros para tarefas
import schedule
def enviar_relatorio(tipo, destinatario):
print(f"Enviando relatorio {tipo} para {destinatario}")
# Passando argumentos
schedule.every().day.at("08:00").do(
enviar_relatorio, "diario", "chefe@empresa.com"
)
schedule.every().monday.at("09:00").do(
enviar_relatorio, "semanal", "equipe@empresa.com"
)
Cancelando tarefas
import schedule
def tarefa():
print("Executando...")
return schedule.CancelJob # executa uma vez e cancela
schedule.every(5).seconds.do(tarefa)
# Ou cancelar manualmente
job = schedule.every(10).seconds.do(tarefa)
schedule.cancel_job(job)
# Cancelar tudo
schedule.clear()
crontab: agendamento no sistema operacional
Para scripts que precisam rodar mesmo quando você não está logado, use o cron (Linux/macOS):
# Abrir o editor de cron
crontab -e
Sintaxe do cron
* * * * * comando
| | | | |
| | | | +-- dia da semana (0-7, domingo = 0 ou 7)
| | | +---- mes (1-12)
| | +------ dia do mes (1-31)
| +-------- hora (0-23)
+---------- minuto (0-59)
Exemplos
# Todo dia as 09:00
0 9 * * * /usr/bin/python3 /home/user/scripts/relatorio.py
# A cada 30 minutos
*/30 * * * * /usr/bin/python3 /home/user/scripts/monitorar.py
# Toda segunda as 08:00
0 8 * * 1 /usr/bin/python3 /home/user/scripts/backup.py
# Primeiro dia de cada mes as 06:00
0 6 1 * * /usr/bin/python3 /home/user/scripts/fatura.py
Dicas para cron
# Use caminhos absolutos para o Python
which python3 # descubra o caminho
# Redirecione a saida para um log
0 9 * * * /usr/bin/python3 /home/user/script.py >> /home/user/logs/saida.log 2>&1
# Defina variaveis de ambiente no topo do crontab
EMAIL_USER=seu@email.com
EMAIL_PASS=senha123
0 9 * * * /usr/bin/python3 /home/user/script.py
schedule vs cron: quando usar cada um
| Critério | schedule | cron |
|---|---|---|
| Onde roda | Dentro do script Python | No sistema operacional |
| Precisa estar rodando | Sim, o script fica ativo | Não, o sistema executa |
| Facilidade | Muito fácil, tudo em Python | Precisa saber a sintaxe |
| Precisão | Segundos | Minutos |
| Ideal para | Desenvolvimento, tarefas leves | Produção, servidores |
Regra prática: use schedule para prototipar e testar, use cron para produção.
Juntando tudo: pipeline de automação
import schedule
import time
from pathlib import Path
# Importando funcoes dos artigos anteriores da trilha
# (web scraping, planilhas, emails)
def pipeline_diario():
print("=== Iniciando pipeline ===")
# 1. Coletar dados (web scraping)
print("1. Coletando dados...")
# dados = scrape_pagina(url)
# 2. Gerar relatorio (planilha)
print("2. Gerando relatorio...")
# gerar_relatorio(dados, "relatorio.xlsx")
# 3. Enviar por email
print("3. Enviando email...")
# enviar_email("chefe@empresa.com", "Relatorio", "Em anexo", anexos=["relatorio.xlsx"])
print("=== Pipeline concluido ===\n")
schedule.every().day.at("08:00").do(pipeline_diario)
print("Pipeline agendado para 08:00 diariamente.")
while True:
schedule.run_pending()
time.sleep(60)
Resumo
| Ferramenta | Para que serve |
|---|---|
schedule |
Agendar tarefas dentro do Python |
crontab |
Agendar execução no sistema operacional |
schedule.every() |
Definir frequência (segundos, minutos, horas, dias) |
.at("09:00") |
Definir horário específico |
CancelJob |
Executar tarefa uma única vez |
Com agendamento, suas automações ganham vida própria. Combine com tudo que você aprendeu nesta trilha e libere seu tempo para o que realmente importa.