Se você já quis rodar um backup toda madrugada, limpar arquivos temporários toda segunda ou disparar um script a cada 5 minutos, o cron é a ferramenta certa. Ele é o agendador de tarefas padrão dos sistemas Unix/Linux: um serviço que fica rodando em segundo plano e executa comandos nos horários que você definir. Essas regras ficam guardadas num arquivo chamado crontab (de "cron table"), e cada linha dele descreve uma tarefa agendada. O que costuma assustar quem está começando é a sintaxe — aquela sequência de asteriscos e números. Neste guia você vai desmontar essa expressão campo por campo e, no fim, montar as suas sem medo (ou deixar o gerador de crontab montar por você).
A anatomia dos 5 campos
Toda expressão de cron tem cinco campos separados por espaço, seguidos do comando a executar. Lidos da esquerda para a direita, eles vão do mais específico (minuto) para o mais amplo (dia da semana). O diagrama abaixo mostra cada posição e seus valores possíveis:
┌───────────── minuto (0 - 59) │ ┌───────────── hora (0 - 23) │ │ ┌───────────── dia do mês (1 - 31) │ │ │ ┌───────────── mês (1 - 12) │ │ │ │ ┌───────────── dia da semana (0 - 6, sendo 0 = domingo) │ │ │ │ │ * * * * * comando-a-executar
Ou seja: 30 8 * * * significa "no minuto 30, da hora 8, em qualquer dia do mês, qualquer mês, qualquer dia da semana" — todo dia às 8h30. Uma dica para nunca mais errar: comece sempre lendo o campo dos minutos e vá subindo. Vale lembrar que o campo dia da semana aceita tanto números (0 a 6) quanto abreviações em inglês (SUN, MON, TUE...), e que alguns sistemas aceitam 7 como domingo além do 0.
Os caracteres especiais
Os números sozinhos resolvem casos simples, mas o poder do cron está em quatro caracteres especiais. Eles podem ser usados em qualquer um dos cinco campos:
- Asterisco (
*) — "todos os valores". Em* * * * *a tarefa roda a cada minuto. No campo da hora,*significa "em todas as horas". - Barra (
/) — "a cada N". Define um intervalo.*/5no campo de minutos quer dizer "a cada 5 minutos";*/2no campo de horas, "a cada 2 horas". - Hífen (
-) — um intervalo contínuo.1-5no campo dia da semana cobre de segunda a sexta.9-17no campo da hora cobre das 9h às 17h. - Vírgula (
,) — uma lista de valores.0,30no campo de minutos roda nos minutos 0 e 30.1,3,5no dia da semana roda segunda, quarta e sexta.
Esses caracteres se combinam. Por exemplo, 0 9-18/2 * * 1-5 significa "no minuto 0, das 9h às 18h a cada 2 horas, de segunda a sexta". Quando a combinação começa a ficar complexa, vale conferir o resultado em linguagem natural antes de colar no servidor.
Exemplos prontos
Na prática, a maioria das tarefas cai em um punhado de padrões. Copie e adapte:
| Expressão | O que faz |
|---|---|
* * * * * |
A cada minuto (útil para testar se o cron está funcionando) |
*/15 * * * * |
A cada 15 minutos |
0 * * * * |
No minuto 0 de toda hora (de hora em hora, "em ponto") |
0 3 * * * |
Todos os dias às 3h da manhã (clássico para backups) |
0 9 * * 1-5 |
Às 9h, de segunda a sexta (dias úteis) |
0 0 1 * * |
À meia-noite do dia 1 de cada mês |
Um cuidado: evite agendar tarefas pesadas para rodarem exatamente no minuto 0 de todas as horas, porque muitos scripts no servidor podem disparar ao mesmo tempo e competir por recursos. Espalhar os horários (um às 0, outro aos 7 minutos) costuma ser mais saudável.
Como colocar no servidor
Com a expressão em mãos, o próximo passo é registrá-la. No Linux, cada usuário tem seu próprio crontab. Para editar o seu, abra o terminal e rode:
crontab -e
Na primeira vez, o sistema pode pedir qual editor você quer usar (nano é o mais simples para iniciantes). Dentro do arquivo, adicione uma linha com a expressão seguida do comando. Por exemplo, para rodar um script de backup todo dia às 3h:
0 3 * * * /home/usuario/scripts/backup.sh
Salve e saia. O cron recarrega automaticamente — não precisa reiniciar nada. Comandos úteis para o dia a dia: crontab -l lista as tarefas atuais, e crontab -r apaga todas (cuidado com esse). Duas recomendações práticas: use sempre caminhos absolutos para scripts e executáveis (o cron roda com um ambiente mínimo e pode não achar comandos que funcionam no seu terminal), e redirecione a saída para um arquivo de log, como >> /var/log/meu-script.log 2>&1, para conseguir depurar quando algo falhar silenciosamente.
Monte a sua sem errar
Decorar a ordem dos campos leva tempo, e um asterisco no lugar errado pode fazer uma tarefa rodar a cada minuto em vez de uma vez por dia. Para montar a expressão com segurança — escolhendo horário, intervalo e dias num formulário visual e vendo o resultado explicado em português —, use o gerador de crontab da Utilpedia. É grátis, funciona direto no navegador e você sai de lá com a linha pronta para colar no crontab -e.