Diário de suporte: driblando o pkgacct no cPanel e alinhando a comunicação com o cliente#
Quem trabalha na trincheira do suporte técnico de alto nível sabe que o dia a dia é composto por uma mistura de "hacking" tático e psicologia aplicada. Hoje documento duas situações reais de rotina: como contornar uma limitação estrutural na geração de backups via CLI no cPanel e como gerenciar crises de comunicação ao isolar problemas externos.
O desafio da exclusão seletiva no pkgacct#
Precisei empacotar uma conta de hospedagem utilizando o script /scripts/pkgacct via terminal, mas com a restrição de excluir diretórios volumosos (como caches e pastas de uploads redundantes) para otimizar o tempo de transferência e armazenamento.
O Problema Técnico: O pkgacct nativo do cPanel não possui uma flag de exclusão direta na linha de comando (ex: --exclude). A opção --skiphomedir é drástica demais, pois ignora todo o /home/usuario/.
A Solução Forense: Utilizar o sistema de exclusão global do Subsistema de Backups do cPanel via arquivo .conf temporário.
1. Mapeamento de espaço e identificação de diretórios volumosos#
Antes de definir o que excluir, o administrador precisa rastrear onde o armazenamento está concentrado na conta do usuário:
# Listar o home do usuário em ordem de tamanho
ls -la /home/usuario/
# Encontrar os 10 maiores diretórios sob a home do usuário
du -sh /home/usuario/*/ | sort -rh | head -10
# Listar o tamanho detalhado dos subdiretórios da public_html (ex: wp-content no WordPress)
du -sh /home/usuario/public_html/wp-content/*/ | sort -rh
# Localizar arquivos individuais maiores que 100MB
find /home/usuario -type f -size +100M -exec ls -lh {} \;
2. Regras de exclusão seletiva no cpbackup-exclude.conf (sintaxe avançada)#
O arquivo cpbackup-exclude.conf permite excluir pastas e arquivos usando padrões relativos e curingas (glob).
Regra de Ouro: Os caminhos devem ser estritamente relativos à home do usuário (/home/usuario/).
- Incorreto:
/home/usuario/public_html/uploads(O cPanel ignorará o padrão). - Correto:
public_html/wp-content/uploads(Sem barra inicial).
Para aplicar exclusões precisas, crie o arquivo:
nano /home/usuario/cpbackup-exclude.conf
Insira os padrões de exclusão recomendados:
# Excluir diretórios específicos de uploads e caches pesados
public_html/wp-content/uploads/
public_html/wp-content/cache/
public_html/cache/
public_html/tmp/
# Excluir todos os arquivos de log e dumps SQL soltos no home
*.log
*.sql
# Padrão curinga (glob) para ignorar conteúdos dentro de qualquer pasta temporária
**/tmp/*
3. Permissões e segurança do arquivo .conf#
O cPanel executa operações de backup como root ou sob privilégios do usuário dependendo do contexto. Permissões incorretas impedirão a leitura do arquivo .conf, fazendo com que o cPanel ignore as regras de exclusão.
Configure o arquivo com as permissões de segurança estritas:
# Se o cPanel lê como root (comum em backups administrativos CLI):
chmod 644 /home/usuario/cpbackup-exclude.conf
chown root:root /home/usuario/cpbackup-exclude.conf
# Caso precise rodar no contexto restrito da conta de usuário:
chown usuario:usuario /home/usuario/cpbackup-exclude.conf
chmod 600 /home/usuario/cpbackup-exclude.conf
4. Backup preventivo e execução do pkgacct#
Antes de sobrescrever configurações ou disparar a compactação, crie cópias preventivas dos arquivos de exclusão existentes se houver, e defina backups preventivos de segurança:
# Fazer backup do arquivo de exclusão atual (se existir)
cp /home/usuario/cpbackup-exclude.conf /home/usuario/cpbackup-exclude.conf.bak 2>/dev/null
# Backup rápido e seguro do home do usuário antes de rodar o pkgacct
tar czf /root/usuario-home-backup-$(date +%Y%m%d).tar.gz /home/usuario/
Agora, execute o empacotamento nativo:
/scripts/pkgacct usuario
Ou salve em um diretório específico com timestamp:
/scripts/pkgacct usuario /root/backup-usuario-$(date +%Y%m%d).tar.gz
5. Verificação e auditoria de logs de backup#
Não confie apenas na saída do console. Audite os arquivos de logs correspondentes para garantir que o processo ocorreu perfeitamente e verificar se houve falhas:
# Logs no home do usuário
tail -100 /home/usuario/logs/pkgacct.log
# Logs administrativos globais do cPanel
tail -100 /usr/local/cpanel/logs/pkgacct.log
# Buscar por mensagens de exclusão de arquivos
grep -i "exclude" /usr/local/cpanel/logs/pkgacct.log
# Buscar por erros ou falhas silenciosas na compilação
grep -iE "error|fail" /usr/local/cpanel/logs/pkgacct.log
6. Auditoria de validação pós-exclusão#
Após a geração do backup, você deve atestar formalmente que a exclusão dos diretórios volumosos foi realizada com sucesso e o arquivo não está corrompido.
# 1. Comparar tamanho do backup (deve ser menor que a soma do home original)
du -sh /home/backup-*.tar.gz
# 2. Listar o conteúdo interno do arquivo sem extrair
tar -tvf /home/backup-*.tar.gz | grep public_html/wp-content/uploads
# 3. Testar a extração controlada em um diretório temporário para inspeção
mkdir -p /tmp/backup-check
tar -xzf /home/backup-*.tar.gz -C /tmp/backup-check
# 4. Validar se a pasta excluída não está presente
ls -la /tmp/backup-check/home/usuario/public_html/wp-content/uploads 2>/dev/null
# Se o comando retornar "No such file or directory" (erro 2), a exclusão funcionou corretamente!
# Limpar o diretório de checagem
rm -rf /tmp/backup-check
7. Procedimento de rollback e recuperação#
Se o empacotamento falhar, travar ou corromper os arquivos da conta de origem, siga a rotina de rollback imediato:
# 1. Remover arquivos de backup temporários corrompidos ou parciais
rm -f /home/backup-*.tar.gz /root/backup-*.tar.gz
# 2. Restaurar o arquivo de exclusão original
if [ -f /home/usuario/cpbackup-exclude.conf.bak ]; then
mv /home/usuario/cpbackup-exclude.conf.bak /home/usuario/cpbackup-exclude.conf
else
rm -f /home/usuario/cpbackup-exclude.conf
fi
# 3. Se necessário, restaurar a partir de um backup anterior íntegro
/scripts/unpkgacct /root/usuario-home-backup-[data_anterior].tar.gz
# 4. Recompilar as configurações do Apache se houver quebras de caminhos virtuais
/usr/local/cpanel/scripts/rebuildhttpdconf
/usr/local/cpanel/scripts/restartsrv httpd
8. Script de automação de backups em lote (múltiplos usuários)#
Para evitar retrabalho operacional ao migrar vários servidores ou múltiplas contas pesadas, utilize o script Bash de automação a seguir:
#!/bin/bash
# backup-selectivo.sh - Automação de backup seletivo para múltiplos usuários no cPanel
USERS=("usuario1" "usuario2" "usuario3")
BACKUP_DIR="/root/backups_seletivos"
mkdir -p "$BACKUP_DIR"
for user in "${USERS[@]}"; do
echo "=============================================="
echo "Iniciando processamento da conta: $user"
echo "=============================================="
# 1. Backup do cpbackup-exclude.conf existente se houver
if [ -f "/home/$user/cpbackup-exclude.conf" ]; then
cp "/home/$user/cpbackup-exclude.conf" "/home/$user/cpbackup-exclude.conf.bak"
fi
# 2. Criar configuração temporária com exclusões padrão
cat > "/home/$user/cpbackup-exclude.conf" << 'EOF'
public_html/wp-content/uploads/
public_html/wp-content/cache/
public_html/cache/
public_html/tmp/
*.log
*.sql
EOF
# Configurar permissões seguras
chown root:root "/home/$user/cpbackup-exclude.conf"
chmod 644 "/home/$user/cpbackup-exclude.conf"
# 3. Executar o pkgacct nativo salvando no diretório de destino
/scripts/pkgacct "$user" "$BACKUP_DIR/backup-$user-$(date +%Y%m%d).tar.gz"
if [ $? -eq 0 ]; then
echo "✅ Backup da conta $user concluído com sucesso."
else
echo "❌ ERRO: Falha ao gerar backup para a conta $user."
fi
# 4. Limpar cpbackup-exclude.conf temporário e restaurar backup se houvesse
rm -f "/home/$user/cpbackup-exclude.conf"
if [ -f "/home/$user/cpbackup-exclude.conf.bak" ]; then
mv "/home/$user/cpbackup-exclude.conf.bak" "/home/$user/cpbackup-exclude.conf"
fi
done
9. Checklist de backup seletivo#
## Checklist: pkgacct com exclusão seletiva
### Pré-backup
- [ ] Mapear diretórios volumosos com `du -sh` e listar arquivos pesados.
- [ ] Fazer backup preventivo do `cpbackup-exclude.conf` original se existir.
- [ ] Criar o arquivo `cpbackup-exclude.conf` com caminhos relativos válidos.
- [ ] Validar as permissões e ownership (chmod 644 / chown root:root).
### Execução
- [ ] Disparar a rotina de compactação `/scripts/pkgacct`.
- [ ] Monitorar a saída detalhada e o log em `/usr/local/cpanel/logs/pkgacct.log`.
- [ ] Verificar a ocorrência de erros ou exceções de I/O.
### Pós-backup
- [ ] Validar a integridade do `.tar.gz` listando seu conteúdo (`tar -tvf`).
- [ ] Testar a extração em diretório `/tmp/` temporário e checar exclusões.
- [ ] Limpar o arquivo `cpbackup-exclude.conf` ou restaurar a cópia de segurança.
- [ ] Documentar o escopo do backup e os diretórios descartados.
Diagnóstico de erros HTTP 404 e validação de DNS#
Recebi um ticket crítico sobre um domínio retornando erro ao carregar uma landing page externa. Após auditar a zona de DNS e confirmar a propagação correta, identifiquei que o destino final respondia com HTTP 404 (Not Found).
1. Diagnóstico técnico de erros HTTP (cURL e --resolve)#
Para isolar o problema e atestar que a falha não é do servidor web que administro, realize checagens completas utilizando o curl:
# 1. Verificar apenas o cabeçalho HTTP de resposta
curl -I https://dominio.com/
# 2. Exibir o handshake SSL e cabeçalhos detalhados
curl -v https://dominio.com/ 2>&1 | grep -E "* TLS|* SSL|< HTTP"
# 3. Loop para testar múltiplos subdomínios ou caminhos específicos da aplicação
for path in "" "/wp-admin" "/login" "/page"; do
echo "Path: $path -> HTTP Status: $(curl -o /dev/null -s -w '%{http_code}' https://dominio.com$path)"
done
# 4. Validar requisições simulando servidores de DNS diferentes (Ignorando cache local com --resolve)
# Formato: --resolve <host>:<port>:<address>
for dns_ip in "192.168.1.100" "192.168.1.101"; do
echo "Testando contra o backend IP $dns_ip:"
curl -o /dev/null -s -w 'HTTP Code: %{http_code}\n' --resolve dominio.com:443:$dns_ip https://dominio.com/
done
2. Auditoria DNS completa e resolução de propagação#
O diagnóstico de apontamento externo exige a validação de todos os tipos de registros DNS e a respectiva propagação:
# 1. Verificar registro A (endereço IP de destino)
dig A dominio.com +short
# 2. Verificar servidores de nomes delegados (NS)
dig NS dominio.com +short
# 3. Verificar apontamentos de correio (MX)
dig MX dominio.com +short
# 4. Checar o TTL (Time To Live) configurado no ANSWER SECTION
dig dominio.com | grep -A1 "ANSWER SECTION"
# 5. Loop para verificar propagação global do apontamento contra resolvers públicos
for resolver in 8.8.8.8 1.1.1.1 208.67.222.222 9.9.9.9; do
echo "Resolver $resolver -> IP: $(dig @$resolver dominio.com A +short)"
done
3. Engenharia de comunicação com cliente N3#
Aqui, o papel do SRE sênior é isolar a responsabilidade técnica sem parecer evasivo. Uma resposta curta e grossa como "Tudo certo por aqui, o erro é do lado deles" gera atritos e novos tickets desnecessários.
A Diferença Entre Informar e Resolver:#
Abordagem Amadora: "No nosso servidor, o DNS está OK. O erro 404 é do lado deles. Verifique com o suporte da landing page."
Abordagem Sênior (Assertiva):
"Olá, [Nome do Cliente]! Realizamos uma auditoria completa na resolução de nomes (DNS) e confirmamos o apontamento correto para os servidores do parceiro. No entanto, ao testar a conectividade direta com o destino (https://dominio.com), o servidor de aplicação deles retorna o status HTTP 404. Isso confirma que o tráfego está chegando ao destino, mas a aplicação final não localiza os arquivos. Recomendamos os seguintes passos antes de abrir um chamado com eles: 1. Confirme com o provedor se o diretório virtual foi corretamente provisionado no servidor de destino. 2. Verifique se o arquivo index correspondente está presente no diretório root da aplicação. 3. Valide se há regras específicas de reescrita (.htaccess/Nginx) redirecionando o tráfego incorretamente para caminhos inexistentes. Estamos à disposição para enviar o relatório completo de logs e DNS caso o parceiro precise de comprovação técnica adicional."
Impacto: Você isola o problema com evidências, entrega valor ajudando o cliente com os próximos passos e encerra o ciclo de dúvida técnica. No suporte N3, a clareza da comunicação deve ser tão absoluta quanto a precisão de um comando no terminal.
Este artigo foi útil?
Deixe uma reação rápida para apoiar o conteúdo:
Este post está licenciado sob CC BY-NC.



Comentários
Participe da discussão abaixo.
0 comentários