Se o cron do WHMCS está demorando muito para concluir a execução, gerando atrasos na emissão de faturas, suspensões de serviços, sincronização de domínios ou envio de e-mails, é sinal de que algo pode estar comprometendo o desempenho da automação.
Neste artigo você aprenderá como identificar os gargalos e aplicar melhorias que podem reduzir drasticamente o tempo de execução do cron.
Como funciona o cron do WHMCS
O cron é responsável por praticamente toda a automação do WHMCS:
Geração de faturas;
Cobranças automáticas;
Suspensão e reativação de serviços;
Sincronização de domínios;
Envio de lembretes;
Processamento de cartões;
Atualizações de status;
Execução de módulos de terceiros.
A recomendação oficial do WHMCS é executá-lo a cada 5 minutos. O sistema controla internamente cada tarefa para evitar execuções duplicadas. (WHMCS Documentation)
Como verificar se o cron está lento
Alguns sinais comuns são:
O cron leva vários minutos para terminar.
O relatório diário mostra tempos elevados.
Faturas são geradas com atraso.
Suspensões acontecem horas depois do programado.
Há filas de e-mails acumuladas.
O consumo de CPU permanece alto durante toda a execução.
Uma forma simples é executar manualmente:
php -q cron.php
Ou, caso utilize o diretório crons:
php -q /home/usuario/crons/cron.php
Observe quanto tempo leva para finalizar.
Principais causas da lentidão
1. Hooks mal desenvolvidos
Esta é, provavelmente, a causa mais comum.
Muitos desenvolvedores criam hooks que executam consultas desnecessárias ou percorrem milhares de registros durante cada execução do cron.
Exemplo ruim:
$clientes = Capsule::table('tblclients')->get();
foreach ($clientes as $cliente) {
...
}
Mesmo quando apenas alguns clientes precisam ser processados.
Como melhorar
Consultar apenas os registros necessários;
Criar índices no banco quando necessário;
Evitar loops desnecessários;
Utilizar LIMIT quando possível.
2. Integrações externas demoradas
Gateways de pagamento, registradores de domínio, APIs de WhatsApp, ERPs e outras integrações podem aumentar significativamente o tempo do cron.
Quando uma API demora 20 segundos para responder e existem dezenas de chamadas, o cron pode facilmente ultrapassar vários minutos.
Boas práticas:
Definir timeout baixo;
Utilizar filas quando possível;
Evitar chamadas repetidas.
3. Consultas SQL lentas
Bancos de dados grandes podem conter milhões de registros.
Consultas sem índices podem consumir muito processamento.
Exemplo:
SELECT *
FROM tblinvoiceitems
WHERE description LIKE '%Hospedagem%';
Essa consulta força uma varredura completa da tabela.
Prefira consultas indexadas.
4. Banco de dados fragmentado
Com o tempo, tabelas crescem e ficam fragmentadas.
Execute periodicamente:
OPTIMIZE TABLE
nas tabelas maiores.
Também é interessante revisar:
tamanho dos índices;
tabelas temporárias;
cache do MySQL.
5. PHP desatualizado
Cada nova versão do PHP traz melhorias significativas de desempenho.
Em muitos casos, apenas atualizar o PHP reduz o tempo do cron em mais de 30%.
Sempre utilize uma versão oficialmente suportada pelo WHMCS.
6. Disco lento
Servidores utilizando HDD costumam sofrer bastante.
WHMCS realiza inúmeras leituras e gravações durante o cron.
Se possível:
utilize SSD;
prefira NVMe;
mantenha espaço livre em disco.
7. Excesso de módulos
Cada módulo instalado pode adicionar novas tarefas ao cron.
Faça uma revisão periódica.
Remova:
gateways não utilizados;
módulos antigos;
addons abandonados.
8. Logs gigantes
Tabelas como:
tblactivitylog
tblmodulelog
tblgatewaylog
tblerrorlog
podem crescer rapidamente.
Arquive ou limpe registros antigos.
Além de economizar espaço, melhora consultas administrativas.
9. DNS lento
Durante sincronizações de domínios ou verificações de servidores, problemas de DNS podem atrasar diversas operações.
Utilize servidores DNS rápidos e confiáveis.
10. Antivírus e monitoramentos
Softwares como:
Imunify360
Maldet
ClamAV
podem coincidir com o cron do WHMCS e disputar recursos.
Procure agendar verificações pesadas em horários diferentes.
Utilize as tarefas separadas do cron
Uma melhoria pouco conhecida do WHMCS é a possibilidade de executar determinadas tarefas em horários específicos.
Por exemplo:
php cron.php skip --AutoSuspensions
e posteriormente:
php cron.php do --AutoSuspensions
Assim, tarefas mais pesadas podem ser distribuídas ao longo do dia, reduzindo o tempo da execução principal do cron. (WHMCS Documentation)
Monitore o tempo de execução
É interessante registrar quanto tempo cada cron leva.
Exemplo:
time php -q cron.php
Ou salvar o resultado em log:
/usr/bin/time php -q cron.php
Assim é possível perceber quando alguma atualização ou módulo passou a degradar o desempenho.
Cuidado com o redirecionamento para /dev/null
É comum encontrar comandos como:
*/5 * * * * php -q cron.php >> /dev/null 2>&1
Esse redirecionamento apenas oculta toda a saída do cron.
Durante testes, remova essa parte temporariamente para visualizar possíveis erros:
php -q cron.php
Depois de corrigido, volte a utilizar o redirecionamento para evitar o envio de e-mails do cron pelo sistema operacional.
Checklist rápido de otimização
Antes de procurar problemas mais complexos, verifique:
✔ PHP atualizado.
✔ Banco otimizado.
✔ Índices SQL corretos.
✔ Hooks revisados.
✔ APIs externas com timeout.
✔ SSD/NVMe.
✔ Logs antigos removidos.
✔ Módulos desnecessários desinstalados.
✔ Cron executando a cada 5 minutos.
✔ Monitoramento do tempo de execução.
Conclusão
Na maioria dos casos, a lentidão do cron do WHMCS não está no próprio sistema, mas sim em fatores externos, como hooks mal implementados, consultas SQL ineficientes, integrações lentas e infraestrutura inadequada.
Uma revisão periódica do ambiente pode reduzir significativamente o tempo de execução da automação, tornando o WHMCS mais rápido, estável e confiável.
Se você desenvolve módulos personalizados, lembre-se de que qualquer código executado durante o cron impacta diretamente toda a automação do sistema. Um hook otimizado faz diferença não apenas no desempenho, mas também na experiência dos seus clientes.

Comentários (0)
Deixe seu comentário