O que é o Cron
O cron é um daemon que executa comandos agendados em sistemas Unix/Linux.
- Ele é iniciado automaticamente em
/etc/init.dquando 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/crontabe 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).LOGNAMEouUSER→ 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:
| Campo | Valores possíveis | Exemplo |
|---|---|---|
| Minuto | 0–59 | 30 |
| Hora | 0–23 | 14 (2 PM) |
| Dia do mês | 1–31 | 1,15 |
| Mês | 1–12 ou JAN–DEC | * |
| Dia da semana | 0–7 (0 ou 7 = domingo, MON–SUN) | 1-5 |
| Comando | Qualquer comando válido do sistema | /bin/ls |
Operadores aceitos
*→ qualquer valor1,2,5→ lista de valores1-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).