CRON & CRONTAB no Linux: Uso e Exemplos

O que é o Cron

O cron é um daemon que executa comandos agendados em sistemas Unix/Linux.

  • Ele é iniciado automaticamente em /etc/init.d quando o sistema entra em níveis de execução multiusuário.
  • Lê os arquivos crontab em /var/spool/cron/crontabs (um para cada usuário listado em /etc/passwd).
  • Também lê o arquivo /etc/crontab e os arquivos em /etc/cron.d.

⚠️ Atenção: os arquivos em /var/spool/cron/crontabs não devem ser acessados diretamente. Sempre use o comando crontab.

O cron desperta a cada minuto e verifica se algum comando deve ser executado naquele momento.
A saída padrão (stdout) é enviada ao dono do crontab (ou ao usuário indicado pela variável de ambiente MAILTO).


O que é o Crontab

O crontab é o programa usado para instalar, editar, listar ou remover tabelas de agendamento.
Cada usuário pode ter seu próprio crontab, executado com seus próprios privilégios.

Regras importantes

  • Linhas em branco e comentários (#) são ignorados.
  • Comentários não podem estar na mesma linha de comandos ou variáveis.
  • Linhas válidas podem ser:
  • Configurações de ambiente (ex.: PATH=/usr/bin)
  • Comandos agendados

Variáveis comuns no crontab

  • SHELL → define o shell usado (padrão: /bin/sh).
  • HOME → diretório inicial do usuário.
  • PATH → caminhos de execução (padrão: /usr/bin:/bin).
  • LOGNAME ou USER → usuário dono do crontab.
  • MAILTO → destinatário do e-mail gerado (se vazio, não envia).

Formato do Crontab

O crontab tem 5 campos obrigatórios seguidos do comando a ser executado:

CampoValores possíveisExemplo
Minuto0–5930
Hora0–2314 (2 PM)
Dia do mês1–311,15
Mês1–12 ou JAN–DEC*
Dia da semana0–7 (0 ou 7 = domingo, MON–SUN)1-5
ComandoQualquer comando válido do sistema/bin/ls

Operadores aceitos

  • * → qualquer valor
  • 1,2,5 → lista de valores
  • 1-5 → intervalo
  • */2 → de n em n (ex.: a cada 2 minutos)

Exemplos

“`bash

Executa “ping” a cada minuto

  • * * * * /sbin/ping -c 1 192.168.0.1 > /dev/null

Executa “ls” e “ping” às 0h e 12h no 1º dia de cada bimestre

0 0,12 1 */2 * /sbin/ping -c 1 192.168.0.1; ls -la >> /var/log/cronrun


Exemplos práticos

1. Relatório de uso de disco (du) entre os dias 1-10, a cada 2h:

bash

PATH =/usr/local/sbin:/usr/local/bin:/home/user1/bin

MAILTO=user1@nowhere.org,user2@somewhere.org

0 */2 1-10 * * du -h --max-depth=1 /

2. Comando às segundas-feiras e nos dias 15-21 (condição OR):

bash

0 4 15-21 * 1 /comando

3. Segundo domingo de cada mês:

bash

0 4 8-14 * * test $(date +\%u) -eq 7 && echo "Segundo Domingo"


Pegadinhas e cuidados

1. O cron não lê .bashrc ou .profile. Se precisar, carregue variáveis no próprio script.

2. O usuário precisa ter um shell válido em /etc/passwd.

3. Verifique se o cron está rodando e se o usuário consta em /etc/cron.alow ou não está em /etc/cron.deny.

4. Não é possível agendar segundos (mínima unidade = 1 minuto).

5. o % precisa ser escapado (\%).

6. Campos de “dia do mês” e “dia da semana” juntos funcionam como OR, não AND.


Referências

Pantz.org Technical Reference Site – Cron and Crontab

man pages: man 5 crontab, man cron


Vídeo associado

Vídeo sobre este assunto no YouTube: Cron e Crontab no Linux – Guia Prático

Notas

1. Daemon: processo em segundo plano. No Windows, equivalente a “serviço”.

2. Paul Vixie: responsável pela implementação do cron no BDS 4.

3. UNIX V7: última versão do unix mantida pelo Bell Labs (1979).

Deixe um comentário