15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
01.11.2024

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

TipoLocalizaçãoObjetivo
Crontab do utilizadorGerido via crontab -eTarefas agendadas por utilizador
Crontab do sistema/etc/crontabTarefas 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 -e

Isto 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 username

Para editar o crontab em todo o sistema diretamente:

sudo nano /etc/crontab

Compreender 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

CampoValores PermitidosDescrição
Minuto0–59O minuto em que o trabalho é executado
Hora0–23A hora em que o trabalho é executado (relógio de 24 horas)
Dia do Mês1–31Dia específico do mês
Mês1–12 ou Jan–DecMês específico
Dia da Semana0–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.sh

Ví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.sh

Travessã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.sh

Barra / — 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.sh

Cadeias Especiais — Agendas Abreviadas

Muitas implementações modernas de cron suportam cadeias abreviadas convenientes:

CadeiaEquivalenteDescrição
@rebootExecute uma vez no arranque
@yearly0 0 1 1 *Execute uma vez por ano
@monthly0 0 1 * *Execute uma vez por mês
@weekly0 0 * * 0Execute uma vez por semana
@daily0 0 * * *Execute uma vez por dia à meia-noite
@hourly0 * * * *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).sql

Limpar Cache da Aplicação — A Cada 6 Horas

0 */6 * * * /var/www/html/artisan cache:clear >> /var/log/cache-clear.log 2>&1

Executar um Script de Atualização do Sistema — Todos os Domingos às 3:30 AM

30 3 * * 0 /usr/local/bin/system-update.sh

Enviar 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.com

Verificar 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)

  1. Pressione CTRL + X
  2. Pressione Y para confirmar a gravação
  3. Pressione Enter para escrever no ficheiro

Em Vi / Vim

  1. Pressione Esc para sair do modo de inserção
  2. Digite :wq e pressione Enter

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 -l

Listar Trabalhos Cron para um Utilizador Específico (Root Necessário)

crontab -l -u username

Remover 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>&1 redireciona 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>&1

Enviar 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.sh

Defina 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 cron

Variá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.sh

Melhor 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 UsoTarefa de Exemplo
Cópias de Segurança da Base de DadosExportações mysqldump ou pg_dump noturnas
Cópias de Segurança de FicheirosArquivos Rsync ou tar para armazenamento remoto
Rotação de RegistosComprimir e arquivar ficheiros de registo antigos
Limpeza de CachePurgar cache de aplicação ou CDN num agendamento
Atualizações do SistemaExecutar apt update && apt upgrade durante janelas de manutenção
Monitorização de SaúdeFazer ping em serviços e alertar em caso de falha
Geração de RelatóriosCompilar e enviar por email análises diárias/semanais
Renovação SSLAcionar verificações de renovação do Certbot ou cliente ACME
Sincronização de DadosSincronizar ficheiros entre servidores ou armazenamento em nuvem
Tarefas de LimpezaEliminar 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.

Resolução de Problemas Comuns de Cron

Trabalho Cron Não Está a Ser Executado?

15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar