Trocar o WP-Cron pelo cron do servidor

O WordPress tem um agendador próprio, o WP-Cron, que trata das publicações marcadas, das verificações de actualização, do esvaziamento do lixo e dos e-mails que os plugins mandam. O nome engana: não é um cron. É um ficheiro que só corre quando alguém visita o site.

Isso dá dois problemas opostos, e um deles é seu. O que fazer está explicado em geral em tarefas agendadas (cron); aqui está o passo a passo do lado do WordPress.

O seu site O que acontece
Poucas visitas por dia As tarefas ficam à espera. A publicação marcada para as 9 da manhã sai às 3 da tarde, quando alguém entrar. Depois disparam todas de uma vez, em cima desse visitante, que fica a olhar para uma página parada.
Muitas visitas por dia O contrário: o agendador é consultado vezes de mais, e cada consulta arranca o WordPress inteiro. É trabalho repetido a competir com os visitantes reais.

A troca, em dois passos que não se separam

Desligar sem criar a tarefa é pior do que não mexer. Se acrescentar a linha ao wp-config.php e se esquecer do resto, as publicações marcadas deixam de sair, os e-mails da loja deixam de ser enviados, e nada dá erro. Faça as duas coisas na mesma sessão, ou nenhuma.
1 Desligue o agendador interno. No wp-config.php, por cima da linha que diz para parar de editar, acrescente define( 'DISABLE_WP_CRON', true );.
2 Crie a tarefa no cPanel. Na secção Avançado, abra Tarefas Agendadas (Cron Jobs). Se não vê o ícone, escreva cron na caixa de procura do painel.
3 Escolha a frequência. De cinco em cinco minutos chega para praticamente tudo. Na lista de frequências comuns isso é */5 * * * *.
4 Escreva o comando, escolhendo uma das duas formas da tabela abaixo.
5 Pôs o seu endereço no campo de notificação, no topo da página, durante os primeiros dias. Quer receber o que a tarefa imprimir, para saber que corre.

As duas formas de escrever o comando

Forma O comando e quando se usa
Pelo PHP, directamente /usr/local/bin/php -q /home/CONTA/public_html/wp-cron.php. Troque CONTA pelo nome da sua conta, e o caminho pelo da pasta do site. É a forma mais rápida e não passa pela web. O /usr/local/bin/php usa a versão de PHP escolhida para a sua conta.
Pela web, com o curl /usr/bin/curl -s "https://asuaempresa.co.mz/wp-cron.php?doing_wp_cron" >/dev/null 2>&1. É a forma que os plugins costumam documentar, e a única que funciona quando o site não está na conta onde cria a tarefa.
Se a aplicação lhe der uma linha pronta, use a dela. Vale sempre mais do que a nossa: quem escreveu o plugin sabe o que ele precisa.
Se protegeu o site com senha, a forma do curl não serve. Com Privacidade de Directório ligada no wp-admin, ou com o site inteiro protegido, o pedido leva com uma recusa e a tarefa nunca corre. Use a forma do PHP, que não passa pelo servidor web.

Confirmar que ficou a funcionar

Esta parte não se salta. Uma tarefa silenciosa que nunca funcionou é igualzinha a uma que funciona.

1 Marque uma publicação para daqui a dez minutos e vá ver se saiu à hora, sem ter aberto o site.
2 Instale um plugin de gestão de tarefas do WordPress. Mostra a lista das tarefas agendadas, a hora a que cada uma corre e quais estão atrasadas. É a maneira mais clara de ver que o novo cron está a alimentar o WordPress.
3 Nos primeiros dias, leia o e-mail que a tarefa manda. Depois de confiar nela, cale-a acrescentando >/dev/null 2>&1 ao fim do comando.

Erros que se repetem

O que fez Porque não funciona
Marcou de minuto a minuto São 1440 arranques por dia a competir com os visitantes, e se uma volta demorar mais de um minuto elas empilham-se umas sobre as outras. Porque isso pesa está em o admin-ajax a consumir tudo e em tarefas agendadas (cron).
Caminho relativo no comando O cron não começa na pasta do site. Os caminhos têm de ser completos, desde o /home/.
Versão de PHP diferente Se apontar directamente ao binário de uma versão e o site correr noutra, faltam extensões e a tarefa falha com erros estranhos.
Desligou e não criou nada O caso mais comum de todos. As tarefas simplesmente deixam de correr, sem uma linha de erro em lado nenhum.
Site em multisite Cada site da rede tem o seu agendador. Uma só chamada não chega: a forma do curl tem de ser repetida para o endereço de cada site.

A hora do servidor pode não ser a sua, e isso muda tudo o que agendar: a que horas está o servidor.

Tem o comando escrito e a tarefa não corre? Mande-nos a linha e o domínio.

Abrir um pedido

VEJA TAMBÉM

Hospedagem WordPress

Planos de hospedagem

Política de Suporte

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 600,00 MT/mês

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?