Agendador Cron: O Guia Completo para Automatizar Tarefas em Servidores Linux
Automatizar tarefas repetitivas é um dos pilares da gestão eficiente de servidores. Quer esteja a executar um pequeno site pessoal ou a gerir um ambiente de produção num plano de VPS Hosting, o agendador cron do Linux é uma ferramenta indispensável que economiza tempo, reduz erros humanos e mantém os seus sistemas funcionando como um relógio — mesmo enquanto dorme.
Este guia abrangente cobre tudo o que precisa de saber sobre cron: desde a compreensão do daemon subjacente e da sintaxe, até casos de uso do mundo real, estratégias de registo e melhores práticas para manter os seus trabalhos agendados mantíveis e seguros.
O Que É Cron e Por Que É Importante?
Cron é um agendador de trabalhos baseado em tempo integrado em sistemas operativos tipo Unix, incluindo todas as principais distribuições Linux. Funciona silenciosamente em segundo plano como um processo daemon (crond) e verifica continuamente ficheiros de configuração — conhecidos como crontabs — para tarefas que precisam ser executadas num momento específico ou intervalo.
O nome “cron” vem da palavra grega *chronos* (χρόνος), que significa tempo — e é exatamente isso que cron lhe dá controlo.
Benefícios Principais do Uso de Cron
- Automatização: Elimine a necessidade de acionar manualmente tarefas repetitivas.
- Fiabilidade: Os trabalhos são executados conforme agendado, independentemente de estar ligado.
- Flexibilidade: Agende tarefas por minuto, hora, dia, semana, mês ou qualquer combinação.
- Eficiência de recursos: Execute tarefas intensivas (como cópias de segurança ou indexação) durante horas de menor procura.
- Escalabilidade: Gerencie dezenas de fluxos de trabalho automatizados num único servidor ou numa frota inteira de Servidores Dedicados.
Como Funciona o Daemon Cron
O daemon cron (crond) inicia automaticamente no arranque e funciona continuamente em segundo plano. A cada minuto, lê todos os ficheiros crontab e verifica se algum trabalho agendado corresponde à hora atual. Se corresponder, o daemon executa o comando ou script associado.
Tipos de Ficheiros Crontab
| Tipo | Localização | Objetivo |
|---|---|---|
| Crontab do utilizador | Gerido via crontab -e | Tarefas agendadas por utilizador |
| Crontab do sistema | /etc/crontab | Tarefas em todo o sistema com campo de utilizador |
| Diretório drop-in | /etc/cron.d/ | Ficheiros cron específicos da aplicação |
| Agendas predefinidas | /etc/cron.daily/, /etc/cron.weekly/, etc. | Scripts executados em intervalos padrão |
Compreender esta hierarquia é importante, especialmente ao gerir ambientes partilhados ou um VPS com cPanel, onde podem coexistir trabalhos cron de nível do sistema e do utilizador.
Aceder e Editar o Crontab
Passo 1: Abra o Seu Terminal
Conecte-se ao seu servidor Linux via SSH ou abra uma sessão de terminal local.
Passo 2: Edite o Ficheiro Crontab
Para criar ou modificar trabalhos cron para o utilizador atual, execute:
crontab -eIsto abre o ficheiro crontab no editor de texto padrão do seu sistema (normalmente nano ou vi). Se for a primeira vez, pode ser-lhe pedido que escolha um editor.
Para editar o crontab para um utilizador específico (requer privilégios de root):
crontab -e -u usernamePara editar o crontab em todo o sistema diretamente:
sudo nano /etc/crontabCompreender a Sintaxe do Trabalho Cron
Cada trabalho cron segue um formato rigoroso de especificação de tempo com cinco campos, seguido do comando a executar:
* * * * * command_to_execute
│ │ │ │ │
│ │ │ │ └── Day of Week (0–7, Sunday = 0 or 7)
│ │ │ └──── Month (1–12 or Jan, Feb, ..., Dec)
│ │ └────── Day of Month (1–31)
│ └──────── Hour (0–23)
└────────── Minute (0–59)Análise Campo a Campo
| Campo | Valores Permitidos | Descrição |
|---|---|---|
| Minuto | 0–59 | O minuto em que o trabalho é executado |
| Hora | 0–23 | A hora em que o trabalho é executado (relógio de 24 horas) |
| Dia do Mês | 1–31 | Dia específico do mês |
| Mês | 1–12 ou Jan–Dec | Mês específico |
| Dia da Semana | 0–7 (0 e 7 = Domingo) | Dia específico da semana |
Caracteres Especiais e Expressões de Tempo
Cron suporta vários caracteres especiais que tornam o agendamento altamente flexível:
Asterisco * — Wildcard (Todos os Valores)
Corresponde a todos os valores possíveis para esse campo.
# Run every minute of every hour, every day
* * * * * /usr/bin/my-script.shVírgula , — Lista de Valores
Especifique múltiplos valores discretos.
# Run at 1, 15, and 45 minutes past every hour
1,15,45 * * * * /usr/bin/my-script.shTravessão - — Intervalo de Valores
Defina um intervalo contínuo.
# Run every minute from 9:00 AM to 5:59 PM, Monday to Friday
* 9-17 * * 1-5 /usr/bin/my-script.shBarra / — Valores de Passo (Incrementos)
Execute em intervalos regulares dentro de um intervalo.
# Run every 5 minutes
*/5 * * * * /usr/bin/my-script.sh
# Run every 2 hours
0 */2 * * * /usr/bin/my-script.shCadeias Especiais — Agendas Abreviadas
Muitas implementações modernas de cron suportam cadeias abreviadas convenientes:
| Cadeia | Equivalente | Descrição |
|---|---|---|
@reboot | — | Execute uma vez no arranque |
@yearly | 0 0 1 1 * | Execute uma vez por ano |
@monthly | 0 0 1 * * | Execute uma vez por mês |
@weekly | 0 0 * * 0 | Execute uma vez por semana |
@daily | 0 0 * * * | Execute uma vez por dia à meia-noite |
@hourly | 0 * * * * | Execute uma vez a cada hora |
Exemplos Práticos de Trabalhos Cron
Cópia de Segurança da Base de Dados — Todas as Noites às 2:00 AM
0 2 * * * /usr/bin/mysqldump -u root -pYourPassword mydb > /backups/mydb_$(date +%F).sqlLimpar Cache da Aplicação — A Cada 6 Horas
0 */6 * * * /var/www/html/artisan cache:clear >> /var/log/cache-clear.log 2>&1Executar um Script de Atualização do Sistema — Todos os Domingos às 3:30 AM
30 3 * * 0 /usr/local/bin/system-update.shEnviar um Relatório Semanal — Todas as Segundas-feiras às 8:00 AM
0 8 * * 1 /usr/local/bin/generate-report.sh | mail -s "Weekly Report" admin@yourdomain.comVerificar Expiração do Certificado SSL — Diariamente ao Meio-dia
0 12 * * * /usr/local/bin/check-ssl.sh >> /var/log/ssl-check.log 2>&1> Dica Profissional: Se gerir Certificados SSL para múltiplos domínios, automatizar verificações de renovação com cron é uma melhor prática que evita expirações inesperadas de certificados.
Guardar e Sair do Editor Crontab
Após adicionar ou modificar os seus trabalhos cron, guarde e saia do editor:
Em Nano (Padrão na Maioria dos Sistemas)
- Pressione
CTRL + X - Pressione
Ypara confirmar a gravação - Pressione
Enterpara escrever no ficheiro
Em Vi / Vim
- Pressione
Escpara sair do modo de inserção - Digite
:wqe pressioneEnter
Ao guardar, cron instala automaticamente o crontab atualizado — não é necessário reiniciar o serviço.
Ver e Gerir Trabalhos Cron Existentes
Listar Todos os Trabalhos Cron para o Utilizador Atual
crontab -lListar Trabalhos Cron para um Utilizador Específico (Root Necessário)
crontab -l -u usernameRemover Todos os Trabalhos Cron para o Utilizador Atual
crontab -r> Aviso: crontab -r elimina todos os trabalhos cron imediatamente sem confirmação. Sempre faça uma cópia de segurança do seu crontab primeiro com crontab -l > crontab-backup.txt.
Ver Trabalhos Cron em Todo o Sistema
cat /etc/crontab
ls /etc/cron.d/
ls /etc/cron.daily/Registo de Saída de Trabalhos Cron
Por padrão, cron não exibe saída no terminal. A saída é normalmente enviada por correio para o utilizador do sistema local ou silenciosamente descartada. O registo adequado é essencial para depuração e auditoria.
Redirecionar Saída para um Ficheiro de Registo
Acrescente tanto a saída padrão (stdout) como o erro padrão (stderr) a um ficheiro de registo:
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1>>acrescenta saída (use>para sobrescrever cada vez)2>&1redireciona stderr para o mesmo destino que stdout
Suprimir Toda a Saída (Modo Silencioso)
Se não precisar de nenhuma saída:
0 2 * * * /usr/local/bin/backup.sh > /dev/null 2>&1Enviar Saída por Email
Defina a variável MAILTO no topo do seu crontab para receber saída de trabalhos por email:
MAILTO="admin@yourdomain.com"
0 2 * * * /usr/local/bin/backup.shDefina MAILTO="" para desativar notificações por email completamente.
Usar uma Estratégia Dedicada de Gestão de Registos
Para servidores de produção, considere integrar registos cron com um sistema de registo centralizado (por exemplo, rsyslog, journald, ou uma plataforma de agregação de registos). Pode ver entradas de registo relacionadas com cron com:
grep CRON /var/log/syslog
# or on systemd-based systems:
journalctl -u cronVariáveis de Ambiente em Crontab
Cron funciona num ambiente mínimo — não obtém o seu .bashrc ou .bash_profile. Esta é uma fonte comum de confusão quando scripts funcionam no terminal mas falham como trabalhos cron.
Pode definir variáveis de ambiente diretamente no seu crontab:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO="admin@yourdomain.com"
HOME=/root
0 2 * * * /usr/local/bin/backup.shMelhor prática: Sempre use caminhos absolutos para comandos e scripts em trabalhos cron para evitar falhas relacionadas com PATH.
Considerações de Segurança para Trabalhos Cron
Controlar Quem Pode Usar Cron
/etc/cron.allow— Apenas utilizadores listados aqui podem usar cron./etc/cron.deny— Utilizadores listados aqui são impedidos de usar cron.
Se cron.allow existe, apenas utilizadores listados são permitidos. Se nenhum ficheiro existe, apenas root pode usar cron (o comportamento varia por distribuição).
Proteger Dados Sensíveis em Trabalhos Cron
Evite incorporar palavras-passe ou chaves API diretamente em entradas de crontab. Em vez disso:
- Armazene credenciais num ficheiro de configuração seguro com permissões restritas (
chmod 600). - Use variáveis de ambiente carregadas de um ficheiro protegido.
- Aproveite ferramentas de gestão de segredos quando apropriado.
Auditar Trabalhos Cron Regularmente
Trabalhos cron não autorizados ou esquecidos podem representar um risco de segurança significativo. Audite periodicamente todos os crontabs de utilizador e sistema, especialmente em ambientes de alojamento partilhado ou após integração de novos membros da equipa.
Casos de Uso Comuns do Mundo Real
| Caso de Uso | Tarefa de Exemplo |
|---|---|
| Cópias de Segurança da Base de Dados | Exportações mysqldump ou pg_dump noturnas |
| Cópias de Segurança de Ficheiros | Arquivos Rsync ou tar para armazenamento remoto |
| Rotação de Registos | Comprimir e arquivar ficheiros de registo antigos |
| Limpeza de Cache | Purgar cache de aplicação ou CDN num agendamento |
| Atualizações do Sistema | Executar apt update && apt upgrade durante janelas de manutenção |
| Monitorização de Saúde | Fazer ping em serviços e alertar em caso de falha |
| Geração de Relatórios | Compilar e enviar por email análises diárias/semanais |
| Renovação SSL | Acionar verificações de renovação do Certbot ou cliente ACME |
| Sincronização de Dados | Sincronizar ficheiros entre servidores ou armazenamento em nuvem |
| Tarefas de Limpeza | Eliminar ficheiros temporários, sessões expiradas ou registos antigos |
Estes casos de uso aplicam-se igualmente quer esteja num plano básico de Alojamento Web Partilhado ou a gerir uma infraestrutura de alto desempenho com Painéis de Controlo VPS.
