Base de conhecimento ServCloud

O pesadelo que é wp-cron.php

O que é wp-cron.php e como funciona?

O arquivo wp-cron.php é a parte do WordPress que lida com eventos agendados em um site WordPress. Qualquer coisa que tenha a ver com o agendamento de postagens ou publicações e realmente qualquer coisa orientada a data / hora é governada pelo arquivo wp-cron.php.

Para que o wp-cron.php funcione corretamente, ele precisa ser executado com frequência, mas não mais do que uma vez por minuto. No entanto, o comportamento padrão não exige que você configure um cron job real no nível do sistema em seu servidor. Em vez disso, ele usa um método piggyback em cada solicitação recebida. Quando uma solicitação chega ao site, o WordPress irá gerar uma solicitação adicional de si mesmo para o arquivo wp-cron.php em HTTP (S). Isso parece bastante inócuo, certo?

Por que o comportamento padrão do wp-cron.php é um pesadelo?

O método padrão funciona perfeitamente bem em um site pequeno com muito poucos visitantes por hora. No entanto, quando implementado em um site de médio ou grande porte, ou mesmo em um site que está sendo verificado por bots (o que é muito comum atualmente), isso significa que você obtém o dobro do tráfego que está lidando no momento. Torna-se um ataque DDoS rudimentar contra você. Isso ocorre porque o cron está sendo executado várias vezes por minuto usando uma solicitação HTTP. A solicitação HTTP gera sobrecarga adicional por ter que gerar, negociar e estabelecer a conexão em um soquete de rede. Ele ainda afeta a capacidade efetiva de seu servidor web subjacente. Essa solução não se sai bem na maioria das situações e, honestamente,

Bem, quais são as alternativas?

A única alternativa real e a solução muito melhor é configurar um cronjob regular do sistema que executa o script wp-cron.php diretamente por meio do PHP a cada minuto. Isso garante que todas as tarefas agendadas sejam realmente executadas no horário agendado. Também não deve ser feito por meio de uma solicitação HTTP, mas uma execução direta de PHP para evitar prejudicar a capacidade do servidor web ou gerar sobrecarga de memória adicional na camada de rede.

Como eu desabilito o comportamento padrão wp-cron.php?

Isso é muito universal e simples de fazer. Você precisa atualizar seu arquivo wp-cronfig.php para incluir a seguinte configuração:

define ('DISABLE_WP_CRON', true);
  • Normalmente, você pode encontrar o arquivo wp-config.php no diretório public_html do seu site .

  • Esta nova configuração deve ser colocada no arquivo logo após a linha do banco de dados DB_COLLATE que se parece com o seguinte

define ('DB_COLLATE', '');


Como configuro um cron job do sistema?

Isso é simples no cPanel, assumindo que seu provedor de hospedagem habilitou o recurso cron job em sua conta. A documentação do cPanel Cron Jobs fornece mais detalhes, mas essencialmente você:

  1. Faça login no cPanel do seu domínio: seudominio.co.br / cpanel

  2. Insira “cron” na caixa de pesquisa rápida perto do topo da página.

  3. Clique no ícone “Cron Jobs” que aparece.

Se não aparecer, sua conta não tem o recurso Cron Jobs habilitado e você precisará falar com seu provedor de hospedagem para obter ajuda na configuração do cron ou na mudança para um pacote que inclua o recurso Cron Jobs.

 

  1. Preste atenção na página Cron Jobs, ela fornecerá a localização exata do seu binário PHP. Você precisará copiar esse caminho para a caixa de comando na parte inferior da página e alterar o arquivo que está sendo executado pelo PHP para ser seu arquivo /home/username/public_html/wp-cron.php . Usando o caminho completo.

  2. Selecione a primeira entrada (“*”) para cada parâmetro. Isso executará o arquivo wp-cron.php a cada minuto.

  3. Clique no botão adicionar cron e pronto.

Por que você é tão severo com essa prática que parece razoável e fácil de corrigir?

Acredito que os engenheiros de software que desenvolvem nosso mundo digital tenham um senso de responsabilidade por seus produtos. O WordPress é onipresente atualmente e com software de instalação automática, como o Softaculous, o WordPress é instalado na grande maioria dos sites. Eles são instalados com o comportamento padrão ativado, que é essencialmente um vetor de ataque em qualquer servidor. Agora, com a indústria de hospedagem sendo tão predominante em nossas vidas, muitas pessoas têm sites WordPress e não sabem sobre esse problema até que ele prejudique seus sites. A integração padrão é extremamente inadequada e deve ser removida. Hoje, em um único servidor, encontrei mais de 500 instalações diferentes do WordPress e observei um bot atingir cada site no servidor. Cada um desses sites de repente se tornou uma responsabilidade para a estabilidade do servidor.

Sei que esse problema é tratado caso a caso. No entanto, com tantas instalações ao redor do mundo, seria melhor abordado pelo WordPress em vez de cada provedor de hospedagem que tem que definir condições especiais em seu servidor para se proteger contra o buraco que este software gera. O custo de remover este comportamento e forçar os proprietários do site a gerar um cron do sistema deve ser a linha de base e um aviso colocado na interface de administração do WordPress de que as tarefas agendadas não serão executadas até que um cron job do sistema seja criado corretamente. Isso está dentro das minhas habilidades de programação, então sei que está dentro das deles.

O WordPress visa a facilidade de uso, então seus consumidores-alvo são aqueles que normalmente sabem pouco sobre ressalvas de hospedagem. Eu acredito que a responsabilidade aqui é inteiramente do WordPress para consertar e eles tomaram uma posição contra isso. Nesse ínterim, os Administradores de Sistema na indústria de hospedagem têm que sofrer com esse terrível “recurso” ao examinar servidores que caíram fora de controle devido a um bot rodando sobre uma instalação padrão do WordPress.

Visualize The Insanity

Cada visitante na configuração padrão wp-cron.php gera uma conexão secundária originada do servidor através de um soquete de rede para wp-cron.php. Logo, cada visitante nesta configuração reduz os soquetes de rede disponíveis gerais pela metade e aumenta a contribuição de carga de um único visitante para o dobro de uma única visita. A solução é executar wp-cron.php por meio de PHP por meio de um cronjob do sistema regularmente agendado. Isso elimina o problema totalmente e, na minha opinião, deve ser a implementação padrão para evitar o abuso de instalações padrão do WordPress abandonadas.

 

Aprenda junto com a nossa equipe