Linux e Terminal
Crontab no Linux: como agendar tarefas com o cron, passo a passo
O cron executa comandos em horários marcados, e o crontab é a lista dessas tarefas. Veja os 5 campos, crontab -e e -l, o PATH do cron, o erro do % e onde achar os logs. Testado em um Debian 13.

O cron é o serviço do Linux que executa comandos sozinho, em horários que você marca. O crontab é a lista dessas tarefas: cada linha diz quando rodar e o quê rodar. Serve para tirar cópias de segurança toda noite, limpar uma pasta toda semana ou rodar um script a cada cinco minutos.
Os exemplos foram executados em um Debian 13. Para praticar, crie uma pasta de treino com um script que anota a hora em que foi executado:
mkdir -p ~/treino-cron && cd ~/treino-cron
cat > ola.sh <<'EOF'
#!/bin/bash
echo "$(date +%T) rodou" >> "$HOME/treino-cron/cron.log"
EOF
chmod +x ola.sh
./ola.sh
cat cron.log20:39:26 rodouO chmod +x torna o script executável (veja o artigo sobre chmod +x). Depois do teste manual, apague o log com rm cron.log.
Os cinco campos de uma linha do crontab
Cada tarefa é uma linha com cinco campos de horário seguidos do comando:
minuto hora dia-do-mês mês dia-da-semana comandoCampo | Valores |
|---|---|
minuto | 0 a 59 |
hora | 0 a 23 |
dia do mês | 1 a 31 |
mês | 1 a 12 (ou jan, feb, mar...) |
dia da semana | 0 a 7 (0 e 7 são domingo; ou sun, mon, tue...) |
Dentro de cada campo você pode usar:
*para "todos os valores";- uma lista com vírgulas, como
1,15; - um intervalo com hífen, como
1-5; - um passo com barra, como
*/5("a cada 5").
Linha | Quando roda |
|---|---|
| todo minuto |
| a cada 5 minutos |
| às 22h, de segunda a sexta |
| às 4h30 nos dias 1 e 15 de cada mês |
| de duas em duas horas, no minuto 0 |
| uma vez, quando o serviço cron inicia |
O cron também aceita atalhos no lugar dos cinco campos: @hourly, @daily, @weekly, @monthly, @yearly e @reboot.
Criar, listar e editar: crontab -n, -l e -e
Antes de instalar uma lista nova, o crontab -n só verifica a sintaxe e não grava nada. Veja o que acontece com um minuto inválido:
echo '61 * * * * $HOME/treino-cron/ola.sh' > ruim.cron
crontab -n ruim.cron"ruim.cron":0: bad minute
errors in crontab file, can't install.Corrigido o arquivo, o mesmo comando confirma que está tudo certo. Os comandos do dia a dia são estes:
Comando | O que faz |
|---|---|
| mostra as tarefas do seu usuário |
| abre a lista no editor e instala ao salvar |
| substitui a lista inteira pelo conteúdo do arquivo |
| remove a lista inteira |
Quem ainda não tem tarefas vê isto:
crontab -lno crontab for labO crontab -e usa o editor padrão do sistema (o Debian chama o sensible-editor). Você pode escolher outro com a variável EDITOR. Não edite os arquivos em /var/spool/cron/crontabs diretamente: o manual avisa que eles não foram feitos para isso.
Sua primeira tarefa, com os erros mais comuns
Crie um arquivo com cinco tarefas de propósito. A primeira é a correta. As outras mostram, uma por uma, o que costuma dar errado:
cat > agenda.cron <<'EOF'
* * * * * $HOME/treino-cron/ola.sh
* * * * * echo "PATH=$PATH" >> $HOME/treino-cron/ambiente.log
* * * * * date +%F >> $HOME/treino-cron/data-errada.log
* * * * * date +\%F >> $HOME/treino-cron/data-certa.log
* * * * * comando-inexistente >> $HOME/treino-cron/erros.log 2>&1
EOF
crontab -n agenda.cron && crontab agenda.cronThe syntax of the crontab file was successfully checked.Dois minutos depois, estes são os arquivos:
cd ~/treino-cron
cat cron.log ambiente.log data-certa.log erros.log
ls data-errada.log20:44:01 rodou
20:45:01 rodou
PATH=/usr/bin:/bin
PATH=/usr/bin:/bin
2026-11-05
2026-11-05
/bin/sh: 1: comando-inexistente: not found
/bin/sh: 1: comando-inexistente: not found
ls: cannot access 'data-errada.log': No such file or directoryO que cada linha ensina:
ola.shrodou uma vez por minuto (aqui, no segundo 01 de cada minuto). O cron consulta a lista uma vez por minuto, então o menor intervalo possível é de um minuto.- O PATH é curto. No cron,
PATHvaleu/usr/bin:/bin. No terminal do mesmo computador, oPATHincluía também/usr/local/bine/usr/games. Um comando que só existe fora das pastas do cron funciona no seu terminal e falha no cron. A saída é usar o caminho completo (como em$HOME/treino-cron/ola.sh). - O
%é especial. Na linhadata-errada, o cron cortou o comando no primeiro%, e o arquivo nem foi criado. Com\%, a data saiu certa. - Comando inexistente: neste Debian, o erro só aparece se você guardá-lo, porque o sistema não tem programa de e-mail (a próxima seção mostra o aviso do cron sobre isso). O
>> arquivo 2>&1manda a saída normal e os erros para o mesmo arquivo.
Como saber se a tarefa chegou a rodar
O cron registra cada execução no jornal do sistema. O filtro abaixo mostra as linhas das duas tarefas com date, a do comando inexistente e o aviso sobre a saída (head -4 limita ao primeiro minuto):
sudo journalctl -u cron --since "-3min" --no-pager | grep -E "date \+|comando-inexistente|No MTA" | head -4Nov 05 20:44:01 lpic1-deb CRON[3285]: (lab) CMD (date +%F >> $HOME/treino-cron/data-certa.log)
Nov 05 20:44:01 lpic1-deb CRON[3286]: (lab) CMD (comando-inexistente >> $HOME/treino-cron/erros.log 2>&1)
Nov 05 20:44:01 lpic1-deb CRON[3288]: (lab) CMD (date +)
Nov 05 20:44:01 lpic1-deb CRON[3277]: (CRON) info (No MTA installed, discarding output)Três informações saem dessas linhas:
CMD (date +)mostra exatamente o que o cron executou depois de cortar no%. Compare com a linha escrita no crontab.CMD (...)aparece para as tarefas que o cron iniciou. Se a linha da sua tarefa não aparece, o problema provavelmente está no horário ou na lista, e não no comando.No MTA installed, discarding output: por padrão, o cron envia a saída das tarefas por e-mail ao dono do crontab. Neste Debian não há programa de e-mail instalado, então essa saída é descartada. Por isso é importante redirecionar para um arquivo.
No laboratório, o usuário não pertence aos grupos adm e systemd-journal. Sem sudo, o journalctl respondeu No entries. Para entender o sudo, leia o artigo sobre sudo. Para ler arquivos de log com calma, veja cat, less, head e tail.
Remover tarefas com segurança
O teste abaixo faz uma cópia da lista, mostra o crontab -e sem abrir um editor (usa cat como editor, então ele só imprime a lista e avisa que nada mudou) e compara o -i -r com o -r. No fim, restaura a cópia:
crontab -l > cron-backup.txt
VISUAL=cat EDITOR=cat crontab -e 2>&1 | tail -3
echo n | crontab -i -r
crontab -l | wc -l
crontab -r
crontab -l
crontab cron-backup.txt
crontab -l | wc -l* * * * * date +\%F >> $HOME/treino-cron/data-certa.log
* * * * * comando-inexistente >> $HOME/treino-cron/erros.log 2>&1
No modification made
crontab: really delete lab's crontab? (y/n) 5
no crontab for lab
5Leia a saída assim:
- as duas primeiras linhas e o
No modification madevêm docrontab -e(otail -3mostra só o fim da lista); - o
crontab -i -rperguntou antes de apagar e, com a respostan, nada foi removido. O primeiro5(colado ao(y/n), porque a pergunta não termina em quebra de linha) é o número de linhas que a lista ainda tinha; - o
crontab -rapagou tudo sem perguntar, e ocrontab -lconfirmou comno crontab for lab; - o
crontab cron-backup.txttrouxe a lista de volta, e o último5mostra as 5 linhas restauradas.
Resumo
Quero | Comando ou linha |
|---|---|
ver minhas tarefas | |
editar tarefas | |
checar a sintaxe de um arquivo | |
rodar a cada 5 minutos | |
rodar todo dia às 3h | |
usar | |
guardar saída e erros | |
ver se rodou | |
apagar tudo, perguntando | |
Documentação oficial (em inglês): os manuais crontab(1) e crontab(5) do Debian. Para escrever o script que o cron vai executar, veja como criar seu primeiro shell script.
Perguntas frequentes
O que é o crontab no Linux?
É o arquivo onde cada usuário lista as tarefas que o cron deve executar sozinho, cada uma com o horário e o comando. Também é o nome do comando que instala, mostra e remove esse arquivo (crontab -e, -l e -r). O cron é o serviço que consulta essas listas uma vez por minuto.
Como listar e remover as tarefas do cron?
Use crontab -l para listar e crontab -r para remover tudo. O -r não pede confirmação: com crontab -i -r o sistema pergunta antes de apagar. Para mudar apenas uma tarefa, abra a lista com crontab -e e edite a linha.
Por que minha tarefa no cron não executa?
As causas mais comuns são o caminho do comando (o cron usa um PATH curto), um % sem a barra invertida na linha, o script sem permissão de execução e o fuso horário diferente do que você imagina. Redirecione a saída para um arquivo com >> arquivo 2>&1 e consulte o jornal do cron para ver se a linha chegou a rodar.
Para ler em seguida
Shell script: como criar seu primeiro script no Linux
Crie e execute seu primeiro shell script: shebang, argumentos, variáveis, if, for e código de saída, com exemplos executados em um Debian 13, passo a passo.
chmod +x: como tornar um script executável e rodá-lo no Linux
Veja por que ./script.sh responde Permission denied ou command not found e como o chmod +x resolve. Inclui o shebang e o erro de finais de linha do Windows. Exemplos executados em um Debian 13.
Como ler arquivos no terminal: cat, less, head e tail
Veja o conteúdo de arquivos no terminal com cat, leia textos longos com less, olhe só o começo ou o fim com head e tail e acompanhe um arquivo em tempo real com tail -f.