Tarefas agendadas, ou cron jobs, são processos que executam automaticamente em segundo plano no sistema Linux. Um cron job é um utilitário que permite definir comandos ou scripts para execução em horários específicos, automatizando tarefas repetitivas em qualquer servidor VPS.

Com cron jobs você pode automatizar backups, limpeza de cache, envio de emails, exclusão de arquivos temporários, execução de scripts de manutenção e muito mais. Administradores de sistema utilizam esta ferramenta para manter servidores funcionando de forma eficiente sem intervenção manual.

Instalação do Cron no Linux

Na maioria das distribuições Linux modernas, o cron já vem instalado por padrão. Para verificar se está ativo no seu sistema Debian/Ubuntu, execute:

sudo systemctl status cron

Caso não esteja instalado, instale com o comando:

sudo apt update
sudo apt install cron

Para iniciar e habilitar o serviço:

sudo systemctl start cron
sudo systemctl enable cron

Como Editar o Crontab

Existem duas formas principais de gerenciar cron jobs: editando o crontab do usuário ou o arquivo sistema. Para editar o crontab do usuário atual:

crontab -e

Para visualizar os cron jobs ativos:

crontab -l

Para editar o arquivo de sistema (requer privilégios root):

sudo nano /etc/crontab

O arquivo sistema contém configurações globais e variáveis de ambiente:

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Exemplo de tarefas do sistema

17 root cd / && run-parts --report /etc/cron.hourly 25 6 * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Sintaxe do Crontab

A sintaxe básica de um cron job segue este formato:

minuto hora dia_mês mês dia_semana comando

Cada campo aceita os seguintes valores:

CampoValoresCaracteres Especiais
Minuto0-59* , - /
Hora0-23* , - /
Dia do Mês1-31* , - /
Mês1-12* , - /
Dia da Semana0-7 (0 e 7 = domingo)* , - /

Caracteres Especiais

  • * (asterisco): Todos os valores possíveis
  • , (vírgula): Lista de valores (ex: 1,3,5)
  • - (hífen): Intervalo de valores (ex: 1-5)
  • / (barra): Intervalos de repetição (ex: */5 = a cada 5 unidades)

Exemplos Práticos de Cron Jobs

Backup Diário

Executar backup todos os dias às 2:30 da manhã:

30 2   * /usr/local/bin/backup.sh

Limpeza de Logs

Limpar logs antigos todo domingo às 23:00:

0 23   0 find /var/log -name "*.log" -mtime +7 -delete

Monitoramento de Site

Verificar disponibilidade de um site a cada 15 minutos:

/15    * curl -f https://meusite.com || echo "Site fora do ar" | mail -s "Alerta" admin@exemplo.com

Reinicialização de Serviço

Reiniciar serviço web toda segunda-feira às 4:00:

0 4   1 systemctl restart apache2

Script PHP

Executar script PHP a cada hora:

0     /usr/bin/php /var/www/html/manutencao.php

Gerenciamento de Logs e Saída

Por padrão, cron jobs enviam a saída por email para o usuário. Para redirecionar a saída:

Salvar saída em arquivo

0 2 * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Descartar saída completamente

0 2 * /usr/local/bin/backup.sh > /dev/null 2>&1

Enviar apenas erros para log

0 2 * /usr/local/bin/backup.sh 2>> /var/log/backup-errors.log

Variáveis de Ambiente

Cron jobs executam com ambiente limitado. Defina variáveis necessárias no início do crontab:

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=admin@exemplo.com
HOME=/root

0 2   * /usr/local/bin/meu-script.sh

Verificação e Depuração

Para verificar se seus cron jobs estão executando, consulte os logs do sistema:

Verificar logs do cron

sudo tail -f /var/log/cron

No Ubuntu/Debian

sudo tail -f /var/log/syslog | grep cron

Verificar logs específicos

grep CRON /var/log/syslog

Diretórios de Cron Predefinidos

O Linux fornece diretórios para tarefas comuns:

  • /etc/cron.hourly/ - Scripts executados a cada hora
  • /etc/cron.daily/ - Scripts executados diariamente
  • /etc/cron.weekly/ - Scripts executados semanalmente
  • /etc/cron.monthly/ - Scripts executados mensalmente

Basta colocar scripts executáveis nesses diretórios para automação simples.

Segurança e Boas Práticas

  • Use caminhos absolutos para comandos e arquivos
  • Teste scripts manualmente antes de agendar
  • Configure logs apropriados para monitoramento
  • Use usuários com privilégios mínimos necessários
  • Implemente verificações de erro nos scripts
  • Documente todos os cron jobs importantes

Alternativas Modernas

Para tarefas mais complexas, considere ferramentas como:

  • systemd timers - Alternativa moderna ao cron
  • Anacron - Para sistemas que não ficam ligados 24h
  • Jenkins - Para automação de CI/CD
  • Ansible - Para automação de infraestrutura

Em ambientes de hospedagem compartilhada, painéis como cPanel oferecem interfaces gráficas para gerenciar cron jobs sem acesso direto ao terminal.