Programador Leigo
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.

Continue lendo

Compartilhar