Pular para o conteúdo
Terminal Prático

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.

Ștefan NistorPublicado em 5 min de leitura
Terminal Debian com crontab -l mostrando uma tarefa agendada a cada minuto e cat cron.log com as duas linhas que o cron gravou, uma por minuto

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:

Terminal
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.log
Resultado
20:39:26 rodou

O 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:

Resultado
minuto hora dia-do-mês mês dia-da-semana  comando

Campo

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

*/5 * * * *

a cada 5 minutos

0 22 * * 1-5

às 22h, de segunda a sexta

30 4 1,15 * *

às 4h30 nos dias 1 e 15 de cada mês

0 */2 * * *

de duas em duas horas, no minuto 0

@reboot

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:

Terminal
echo '61 * * * * $HOME/treino-cron/ola.sh' > ruim.cron
crontab -n ruim.cron
Resultado
"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

crontab -l

mostra as tarefas do seu usuário

crontab -e

abre a lista no editor e instala ao salvar

crontab arquivo

substitui a lista inteira pelo conteúdo do arquivo

crontab -r

remove a lista inteira

Quem ainda não tem tarefas vê isto:

Terminal
crontab -l
Resultado
no crontab for lab

O 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:

Terminal
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.cron
Resultado
The syntax of the crontab file was successfully checked.

Dois minutos depois, estes são os arquivos:

Terminal
cd ~/treino-cron
cat cron.log ambiente.log data-certa.log erros.log
ls data-errada.log
Resultado
20: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 directory

O que cada linha ensina:

  1. ola.sh rodou 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.
  2. O PATH é curto. No cron, PATH valeu /usr/bin:/bin. No terminal do mesmo computador, o PATH incluía também /usr/local/bin e /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).
  3. O % é especial. Na linha data-errada, o cron cortou o comando no primeiro %, e o arquivo nem foi criado. Com \%, a data saiu certa.
  4. 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>&1 manda 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):

Terminal
sudo journalctl -u cron --since "-3min" --no-pager | grep -E "date \+|comando-inexistente|No MTA" | head -4
Resultado
Nov 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:

Terminal
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
Resultado
* * * * * 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
5

Leia a saída assim:

  • as duas primeiras linhas e o No modification made vêm do crontab -e (o tail -3 mostra só o fim da lista);
  • o crontab -i -r perguntou antes de apagar e, com a resposta n, nada foi removido. O primeiro 5 (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 -r apagou tudo sem perguntar, e o crontab -l confirmou com no crontab for lab;
  • o crontab cron-backup.txt trouxe a lista de volta, e o último 5 mostra as 5 linhas restauradas.

Resumo

Quero

Comando ou linha

ver minhas tarefas

crontab -l

editar tarefas

crontab -e

checar a sintaxe de um arquivo

crontab -n arquivo

rodar a cada 5 minutos

*/5 * * * * comando

rodar todo dia às 3h

0 3 * * * comando

usar % na linha

\%

guardar saída e erros

comando >> arquivo 2>&1

ver se rodou

sudo journalctl -u cron

apagar tudo, perguntando

crontab -i -r

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