Diário de suporte: driblando o pkgacct no cPanel e alinhando a comunicação com o cliente
Voltar para blog

Diário de suporte: driblando o pkgacct no cPanel e alinhando a comunicação com o cliente

07/06/2026 · 4 min · Infraestrutura

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/).

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:

CC BY-NC

Este post está licenciado sob CC BY-NC.

Comentários

Participe da discussão abaixo.

0 comentários