Tutorial

Crontab: exemplos de agendamento de tarefas no Linux, sintaxe e erros comuns

Atualizado: · Skillaria.Top

O crontab é a tabela de agendamento que o daemon cron usa para executar comandos: cada linha tem cinco campos de tempo (minuto, hora, dia do mês, mês, dia da semana) seguidos do comando, por exemplo */5 * * * * /opt/backup.sh executa o script a cada 5 minutos. A tabela é editada com crontab -e, e a maioria dos problemas vem do ambiente reduzido do cron: use caminhos completos e grave a saída em um log.

O cron é o agendador padrão do Linux: o daemon cron lê a cada minuto as tabelas de agendamento (crontabs) e executa os comandos cujo horário chegou. É assim que se fazem backups noturnos, limpeza de arquivos temporários, renovação de certificados e envio de relatórios. Abaixo estão a sintaxe, exemplos de crontab para casos típicos e a análise dos erros que fazem a tarefa não rodar "sem avisar".

Como abrir e editar o crontab

Cada usuário tem a sua tabela. Ela é gerenciada pelo comando crontab, e não por edição direta dos arquivos em /var/spool/cron:

ComandoO que faz
crontab -eabrir a sua tabela no editor (na primeira vez, pede para escolher o editor)
crontab -lmostrar a tabela atual
crontab -rapagar a tabela inteira, sem confirmação
crontab -i -rapagar com confirmação (Debian/Ubuntu, RHEL)
sudo crontab -u alice -eeditar a tabela de outro usuário
crontab arquivosubstituir a tabela pelo conteúdo do arquivo

Depois de salvar, o crontab -e verifica a sintaxe e escreve crontab: installing new crontab. Se houver erro em alguma linha, aparecem errors in crontab file, can't install e a oferta de editar de novo. Não é preciso reiniciar o daemon: as alterações são lidas automaticamente.

Tenha cuidado com o -r: as teclas e e r ficam próximas, e não existe cópia de segurança da tabela. Um hábito útil é manter um backup:

crontab -l > ~/crontab.bak
# restaurar
crontab ~/crontab.bak

Sintaxe do crontab: os cinco campos de tempo

Cada linha de tarefa tem esta forma:

# ┌───────── minuto (0–59)
# │ ┌─────── hora (0–23)
# │ │ ┌───── dia do mês (1–31)
# │ │ │ ┌─── mês (1–12 ou jan–dec)
# │ │ │ │ ┌─ dia da semana (0–7 ou sun–sat; 0 e 7 — domingo)
# │ │ │ │ │
  * * * * * comando

Em cada campo podem ser usados caracteres especiais:

CaractereSignificadoExemplo
*

Perguntas frequentes

Qual a diferença entre cron e anacron?

O cron executa as tarefas no horário exato e pula as que caíram enquanto o computador estava desligado. O anacron garante que as tarefas diárias, semanais e mensais sejam executadas depois que o computador ligar, por isso é indicado para notebooks e desktops.

Cron ou timers do systemd: qual escolher?

O cron é mais simples e existe praticamente em qualquer lugar. Os timers do systemd registram os logs no journalctl, aceitam dependências e limites de recursos e têm a opção Persistent=true para execuções perdidas, por isso são cada vez mais escolhidos para tarefas importantes em servidores modernos.

Onde fica fisicamente o crontab de um usuário?

No Debian e no Ubuntu, em /var/spool/cron/crontabs/nome; no RHEL e no Fedora, em /var/spool/cron/nome. Não edite esses arquivos diretamente: use crontab -e.

Como desativar temporariamente uma tarefa do crontab?

Comente a linha com o caractere # no início, usando crontab -e. Para desativar todas as tarefas do usuário, salve a tabela em um arquivo com crontab -l e depois apague-a com crontab -r.

Como executar uma tarefa no último dia do mês?

Não existe um campo para isso. Agende a tarefa para os dias 28 a 31 e verifique se amanhã é o dia 1: 0 23 28-31 * * [ "$(date -d tomorrow +\%d)" = 01 ] && /opt/job.sh.

Aprenda este tema em vídeo

Este tema é abordado em profundidade, com prática, no curso “Linux: с нуля до уверенного администрирования”.

Ir para o curso