Os Cron jobs são usados para agendar tarefas em horários, datas ou intervalos periódicos fixos no seu site WordPress. Alguns exemplos de Cron jobs do WordPress incluem agendar a publicação de um artigo, verificar atualizações ou executar um plugin de backup em uma programação predefinida.

No WordPress, isso é gerenciado pelo WP-Cron, que é usado para simular um Cron do sistema. No entanto, dependendo da quantidade de tráfego do seu site, o uso do manipulador de Cron integrado pode começar a afetar os tempos de carregamento das páginas.

Por isso, hoje vamos mostrar como desabilitar o WP-Cron (wp-cron.php) e, em vez disso, usar um Cron do sistema para obter um melhor desempenho.

Por que desabilitar o WP-Cron?

Aqui na Kinsta, lidamos com muitos sites com alto tráfego e alta demanda. Por causa disso, temos observado muitos problemas de desempenho com o manipulador de cron integrado ao WordPress: o WP-Cron.

Antes de tudo, é importante entender que o WP-Cron não é um Cron real. Ele é simplesmente a forma que o WordPress criou para imitar o funcionamento de um Cron do sistema.

O WP-Cron não é executado continuamente. Por padrão, o wp-cron.php é acionado a cada carregamento de página, o que pode causar problemas em sites com alto volume de tráfego. Se um site não tiver Threads PHP suficientes, quando uma solicitação chegar, o WordPress iniciará o Cron, mas ele terá de esperar por uma thread disponível e ficará na fila até poder ser executado.

O cenário inverso também é verdadeiro. Se um site não recebe muito tráfego, tarefas agendadas podem não ser executadas porque ninguém carregou uma página para disparar o WP-Cron.

Além disso, também existe um motivo de segurança para desabilitar o WP-Cron. Como o wp-cron.php é um arquivo acessível publicamente, qualquer pessoa pode acioná-lo enviando uma solicitação para https://yourdomain.com/wp-cron.php.

Em um site específico, isso pode ser usado para aumentar repetidamente a carga do servidor, uma forma simples, mas eficaz, de desacelerar ou desestabilizar um site. Desabilitar o WP-Cron elimina completamente essa possibilidade.

Desabilitar o WP-Cron no WordPress (2 etapas)

Veja o que você deve fazer (nesta ordem):

  1. Primeiro, configurar um Cron no nível do servidor para substituir o WP-Cron.
  2. Em seguida, desabilitar o WP-Cron no seu wp-config.php

Se você desabilitar o WP-Cron primeiro sem configurar uma substituição, suas tarefas agendadas (agendamento de artigos, trabalhos de backup, verificações de atualização de plugins e notificações por e-mail) deixarão de ser executadas silenciosamente. Nenhum erro será exibido, apenas tarefas não executadas.

Etapa 1: configurar um Cron no nível do servidor

Agora que você entende por que o WP-Cron pode ser um problema, veja como substituí-lo. O Cron do sistema é executado em uma programação predefinida e é até mesmo recomendado no manual oficial de plugins.

Escolha o método que corresponde à sua configuração de hospedagem.

Usando o cPanel

Se você utiliza um provedor de hospedagem com cPanel, pode criar um Cron do sistema diretamente no painel de controle. Primeiro, faça login no cPanel. Na seção Advanced, clique em Cron Jobs.

cPanel cron jobs
cPanel cron jobs.

Na seção Add New Cron Job, você pode escolher entre vários agendamentos predefinidos, como duas vezes por hora ou uma vez por semana. Seu provedor de hospedagem provavelmente possui um limite para a frequência com que os Cron jobs podem ser executados. Duas vezes por hora é uma configuração comum em hospedagens compartilhadas.

Configurações de Cron Jobs no cPanel.
Configurações de Cron Jobs no cPanel.

Adicione o comando a seguir. Substitua https://dominio.com pelo seu nome de domínio. Esse comando pode variar um pouco dependendo da configuração da sua hospedagem. Em seguida, clique em Add New Cron Job.

wget -q -O - https://domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Adicionar novo Cron Job no cPanel.
Adicionar novo Cron Job no cPanel.

A parte >/dev/null 2>&1 do comando acima desabilita as notificações por e-mail.

Usando SSH e Crontab

Se você possui acesso SSH ao seu servidor, pode configurar o Cron diretamente no crontab do servidor. Isso funciona em qualquer servidor baseado em Linux, independentemente do painel de controle utilizado.

Conecte-se via SSH e execute:

crontab -e

Em seguida, adicione uma das linhas abaixo (escolha apenas uma).

Usando wget (funciona em qualquer servidor):

*/15 * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Usando PHP diretamente (ligeiramente mais rápido, sem a sobrecarga de uma solicitação HTTP):

*/15 * * * * php /path/to/wordpress/wp-cron.php >/dev/null 2>&1

Substitua seudominio.com e /path/to/wordpress pelo seu domínio real e pelo caminho de instalação do WordPress. O */15 executa o cron a cada 15 minutos, um bom padrão para a maioria dos sites.

Usando o WP-CLI

Se você usa WP-CLI, este costuma ser o método mais limpo. O comando Cron integrado do WP-CLI executa apenas os eventos que realmente estão pendentes, o que é mais eficiente do que chamar diretamente o wp-cron.php. Adicione a seguinte linha ao seu crontab usando crontab -e:

*/15 * * * * cd /path/to/wordpress && wp cron event run --due-now --allow-root >/dev/null 2>&1

Você também pode usar o WP-CLI para inspecionar seus eventos agendados a qualquer momento sem executá-los:

wp cron event list

Isso é útil para solução de problemas. Ele mostra todos os eventos Cron pendentes, quando estão programados para serem executados e a qual hook estão associados.

Usando uma ferramenta de terceiros

Se você não se sente confortável configurando Cron jobs no seu servidor ou seu provedor de hospedagem não oferece acesso a esse recurso, também pode usar uma solução de terceiros como o EasyCron.

Importante: redes WordPress Multisite

Em uma rede Multisite, o funcionamento é um pouco diferente.

O WP-Cron precisa ser executado individualmente para cada subsite, e não apenas para o site principal. Se você configurar apenas um Cron no servidor apontando para o wp-cron.php do domínio principal, os Cron jobs de subsites em domínios ou subcaminhos diferentes podem não ser executados de forma confiável.

A solução mais simples é usar o WP-CLI, que oferece suporte nativo ao Multisite:

*/15 * * * * cd /path/to/wordpress && wp cron event run --due-now --url=https://yourdomain.com --allow-root >/dev/null 2>&1

Para redes com muitos subsites, você pode percorrer todos eles usando:

*/15 * * * * cd /path/to/wordpress && wp site list --field=url | xargs -I % wp cron event run --due-now --url=% --allow-root >/dev/null 2>&1

A constante DISABLE_WP_CRON no arquivo wp-config.php funciona da mesma forma em ambientes Multisite: basta adicioná-la uma única vez e ela será aplicada a toda a rede.

Etapa 2: desabilitar o WP-Cron no wp-config.php

Para desabilitar o WP-Cron, adicione o código abaixo ao arquivo wp-config.php, logo antes da linha que diz “That’s all, stop editing! Happy blogging.”

define('DISABLE_WP_CRON', true);
Desativar o WP-Cron.
Desativar o WP-Cron.

Salve o arquivo e pronto. O WP-Cron não será mais executado durante o carregamento das páginas.

Essa constante impede que o WP-Cron seja executado durante o carregamento das páginas. Ela não impede que o wp-cron.php seja chamado diretamente. O Cron do servidor configurado na Etapa 1 continuará podendo acioná-lo normalmente, conforme esperado.

Como verificar se tudo está funcionando

Depois de concluir as duas etapas, é recomendável confirmar se o WP-Cron foi realmente desabilitado e se o Cron do servidor está sendo executado corretamente.

Opção 1: usar o plugin WP Crontrol

Instale e ative o plugin gratuito WP Crontrol. No painel de controle do WordPress, acesse Ferramentas → Eventos Cron. Você verá uma lista de todos os eventos agendados. Se o WP-Cron estiver devidamente desabilitado, os eventos não deverão mais ser executados a cada carregamento de página, mas apenas nos intervalos definidos pelo Cron do servidor.

Opção 2: verificar com WP-CLI

Execute este comando no seu servidor:

wp cron event list

Ele exibe todos os eventos Cron pendentes juntamente com o horário da próxima execução programada. Se a lista parecer normal e os eventos estiverem sendo processados entre as execuções, sua configuração está funcionando corretamente.

Opção 3: verificar os registros do servidor

Se você configurou uma entrada no crontab, pode redirecionar temporariamente a saída para um arquivo de registro para confirmar que ela está sendo executada:

*/15 * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >> /tmp/wpcron.log 2>&1

Verifique o arquivo /tmp/wpcron.log após 15 minutos para confirmar que o Cron job foi executado. Depois de confirmar, remova o redirecionamento para o arquivo de registro.

Resumo

Desabilitar o WP-Cron e substituí-lo por um Cron real no nível do servidor é uma alteração simples que melhora a confiabilidade, reduz o consumo de recursos e elimina um endpoint público desnecessário.

Ou você pode evitar a maior parte dessa configuração escolhendo uma hospedagem que já cuide disso para você. Provedores de hospedagem gerenciada, como a Kinsta, executam um Cron do servidor a cada 15 minutos por padrão. Assim, basta desabilitar o WP-Cron e deixar que a plataforma cuide do restante.

Brian Jackson

Brian tem uma enorme paixão pelo WordPress, e tem utilizado há mais de uma década e até desenvolve alguns plugins premium. Brian gosta de blogs, filmes e caminhadas. Conecte-se com Brian no Twitter.