Tools Blog

Compreendendo as expressões Cron: um guia prático para automação de tarefas

Cron Job Automation

Se você já gerenciou um servidor Linux, trabalhou no desenvolvimento de back-end ou configurou funções automatizadas na nuvem, provavelmente encontrou uma string parecida com esta: 0 2 * * *. Para os não iniciados, parece um erro de digitação no teclado. Para administradores de sistema, é o coração da automação de infraestrutura moderna: uma Expressão Cron.

Cron é o mecanismo invisível que comanda a Internet. Ele garante o backup do seu banco de dados às 3h, aciona os e-mails que você recebe todas as segundas-feiras de manhã e limpa os arquivos temporários do servidor antes que eles travem o sistema. Mas, apesar de seu poder, a sintaxe é notoriamente difícil de ser analisada pelos humanos. Neste mergulho profundo, desmistificaremos os asteriscos e ensinaremos como ler e escrever cronogramas cron como um engenheiro DevOps experiente.

O que é Cron e o Crontab?

Cron é um agendador de tarefas baseado em tempo encontrado em sistemas operacionais de computador do tipo Unix. O nome "cron" vem da palavra grega para tempo, chronos. Os usuários que configuram e mantêm ambientes de software usam o cron para agendar tarefas (comandos ou scripts de shell) para serem executadas periodicamente em horários, datas ou intervalos fixos.

O Crontab (Tabela Cron) é o arquivo de configuração onde esses agendamentos são armazenados. Ao editar seu crontab através do terminal, você está escrevendo uma lista de instruções informando ao servidor exatamente o que executar e quando.

Desconstruindo os 5 Asteriscos

Uma expressão cron padrão consiste em 5 campos separados por espaços em branco. Cada campo representa uma unidade específica de tempo e são sempre lidos da esquerda para a direita nesta ordem exata:

* * * * *  command_to_execute
- - - - -
| | | | |
| | | | +----- Day of the Week (0 - 6) (Sunday=0 or 7)
| | | +------- Month (1 - 12)
| | +--------- Day of the Month (1 - 31)
| +----------- Hour (0 - 23)
+------------- Minute (0 - 59)

Um asterisco (*) significa "todos os valores possíveis para este campo". Portanto, a expressão * * * * * se traduz literalmente como: "Executar a cada minuto, a cada hora, a cada dia, a cada mês, a cada dia da semana."

Modificadores de sintaxe: etapas, intervalos e listas

O poder do cron vem de seus modificadores. Você não está limitado apenas a números específicos ou “tudo”.

1. O modificador de etapa (/)

Se você quiser que um script seja executado a cada 15 minutos, use uma etapa. */15 * * * * significa "cada minuto divisível por 15". Ele será executado às 0, 15, 30 e 45 horas após a hora.

2. O modificador de intervalo (-)

Se você deseja que um script seja executado apenas durante o horário comercial, use um intervalo. 0 9-17 * * * significa "executar no minuto zero, a cada hora, das 9h às 17h".

3. O modificador de lista (,)

Se você quiser que algo seja executado em dias específicos e não sequenciais, use uma lista. 0 0 1,15 * * significa "executar à meia-noite do dia 1 e 15 de cada mês".

Pare de adivinhar expressões Cron

Não arrisque executar um script de backup a cada minuto, em vez de todos os meses. Um único erro de digitação pode travar um servidor de produção. Use nosso gerador visual interativo para construir e validar strings cron com segurança.

Gerador de Cron Job aberto

O erro mais perigoso do Cron

O erro mais comum e catastrófico que os desenvolvedores cometem é confundir o campo “Minuto”. Vejamos um cenário em que você deseja executar um script de limpeza de banco de dados uma vez por hora, às 2h.

O erro: * 2 * * *

Se você escrever o acima, estará dizendo ao servidor para executar o script "A cada minuto, durante a 2ª hora do dia". Seu script pesado de limpeza de banco de dados será acionado 60 vezes seguidas, provavelmente sobrecarregando sua CPU, bloqueando tabelas de banco de dados e causando uma interrupção massiva.

A maneira correta: 0 2 * * *

Isso diz explicitamente ao servidor para rodar apenas no "Minuto zero, da 2ª hora". Ele será executado exatamente uma vez às 2h.

Perguntas frequentes (FAQ)

O cron leva em conta os fusos horários?

Por padrão, o cron avalia expressões com base na hora do sistema local do servidor em que está sendo executado. Se o seu servidor estiver hospedado em uma região da AWS em Londres, ele será executado em UTC/GMT. Você deverá levar em conta as diferenças de fuso horário se seus usuários estiverem em Nova York ou Tóquio.

Posso agendar um cron job para ser executado a cada segundo?

Não. O cron padrão do Unix é limitado a uma resolução de um minuto. Se você precisar de agendamento em subminutos (por exemplo, a cada 10 segundos), deverá usar uma ferramenta daemon separada ou escrever um script que seja executado a cada minuto, mas faça um loop interno com comandos de suspensão.

O que significam strings como @daily ou @hourly?

Muitas implementações modernas de cron suportam macros predefinidas não padrão para facilitar o agendamento. @daily é exatamente o mesmo que 0 0 * * * (meia-noite todos os dias). @hourly é o mesmo que 0 * * * *. Embora úteis, eles não têm suporte universal em todos os sistemas legados.