Crontab: exemplos de agendamento de tarefas no Linux, sintaxe e erros comuns
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:
| Comando | O que faz |
|---|---|
crontab -e | abrir a sua tabela no editor (na primeira vez, pede para escolher o editor) |
crontab -l | mostrar a tabela atual |
crontab -r | apagar a tabela inteira, sem confirmação |
crontab -i -r | apagar com confirmação (Debian/Ubuntu, RHEL) |
sudo crontab -u alice -e | editar a tabela de outro usuário |
crontab arquivo | substituir 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:
| Caractere | Significado | Exemplo |
|---|---|---|
* |
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.
Este tema é abordado em profundidade, com prática, no curso “Linux: с нуля до уверенного администрирования”.
Ir para o curso