Diferenças entre crontab -e e edição direta de /etc/crontab no Linux

Quando precisamos agendar tarefas automatizadas em sistemas Linux, existem duas abordagens distintas para configurar o cron, cada uma com seu propósito específico e implicações de segurança.

Abordagem por usuário: comando crontab

Através do comando crontab -e, criamos agendamentos vinculados a uma conta específica. O sistema armazena essas configurações em /var/spool/cron/ ou /var/spool/cron/crontabs/, dependendo da distribuição, gerando arquivos nomeados conforme o usuário.

Exemplo de estrutura gerada:

[usuario@servidor ~]$ crontab -e
# Adicionada linha: 0 2 * * * /home/usuario/scripts/backup_db.sh

[usuario@servidor ~]$ sudo ls -la /var/spool/cron/
total 12
drwxr-xr-x. 2 root root   22 Jun 15 09:00 .
drwxr-xr-x. 5 root root   41 Jun 10 14:32 ..
-rw-------. 1 root root  156 Jun 15 09:15 root
-rw-------. 1 usuario usuario 89 Jun 15 08:45 usuario

Conteúdo típico de arquivo de spool:

[usuario@servidor ~]$ sudo cat /var/spool/cron/usuario
# Backup diário do banco de dados
0 2 * * * /home/usuario/scripts/backup_db.sh >/dev/null 2>&1
# Limpeza de logs semanal
0 3 * * 0 /home/usuario/scripts/limpa_logs.sh

Abordagem administrativa: arquivo /etc/crontab

O arquivo /etc/crontab serve para configurações de nível sistêmico, exigindo privilégios de superusuário. Sua estrutura obriga a especificação explícita da conta que executará cada comando.

Formato característico:

[admin@servidor ~]$ cat /etc/crontab
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Variáveis de ambiente
MAILTO=admin@empresa.com
HOME=/

# Sincronização de horário
*/30 * * * * root /usr/sbin/chronyd -q 'server pool.ntp.br iburst'

# Tarefas de manutenção do sistema
05 2 * * * root /usr/sbin/aide --check
15 3 * * 1 root /usr/sbin/fstrim -av
30 4 1 * * root /usr/local/bin/relatorio_mensal.sh

# Diretórios de agendamento em massa
*/5 * * * * root run-parts /etc/cron.d/5minutos
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Diretório /etc/cron.d como alternativa

Além de editar /etc/crontab diretamente, pacotes de software frequentemente depositam arquivos em /etc/cron.d/, mantendo configurações modulares e evitando conflitos durante atualizações.

Exemplo de arquivo em /etc/cron.d/:

[admin@servidor ~]$ cat /etc/cron.d/sincroniza_dados
# Sincronização de arquivos entre servidores
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin

*/10 * * * * syncuser /usr/bin/rsync -az --delete /dados/origem/ servidor-remoto:/dados/mirror/

Comparação de características

Aspecto crontab -e /etc/crontab ou /etc/cron.d/
Escopo Usuário individual Todo o sistema
Permissões necessárias Própria conta root
Local de armazenamento /var/spool/cron/ /etc/crontab ou /etc/cron.d/
Sintaxe da linha temporal 5 campos (sem usuário) 6 campos (inclui usuário)
Validação de sintaxe Automática ao salvar Manual (crond recarrega periodicamente)
Visibilidade Restrita ao usuário/root Global para administradores

Práticas recomandadas

Para rotinas pessoais de desenvolvedores ou operadores, prefira crontab -e, que oferece verificação sintática automática e isolação de permissões. Para serviços críticos de infraestrutura que devem persistir independentemente de contas de usuário, utilize /etc/cron.d/ com arquivos descritivos e versionados, ou edite /etc/crontab quando necessário centralizar configurações sistêmicas.

Após modificações manuais em arquivos de sistema, force o recarregamento do serviço:

sudo systemctl restart crond
# ou em sistemas mais antigos:
sudo service cron restart

Tags: cron crontab linux-administration job-scheduling system-maintenance

Publicado em 9-28 08:08