WordPress Cron: como gerir tarefas agendadas em sites de clientes

WP-Cron é o sistema de tarefas agendadas do WordPress — responsável por backups automáticos, publicação de posts agendados, limpeza de transients, renovação de certificados em alguns plugins e emails de WooCommerce. Quando o WP-Cron falha silenciosamente, muitas funcionalidades param de funcionar sem aviso. Entender como funciona e como diagnosticar problemas é essencial para a manutenção WordPress.

Como o WP-Cron funciona (e porque é diferente de cron real)

WP-Cron não é um cron job real do sistema operativo. É um sistema pseudo-cron que funciona assim:

  1. Quando um visitante acede ao site, o WordPress verifica se há tarefas agendadas em atraso
  2. Se houver, executa-as antes de servir a página
  3. Se o site não tiver tráfego, as tarefas não correm

Este design tem implicações importantes:

  • Sites com pouco tráfego: as tarefas agendadas podem atrasar horas ou não correr de todo se não houver visitas
  • Performance: em sites com muitas tarefas agendadas, o WP-Cron pode adicionar latência a algumas requisições
  • Timing impreciso: uma tarefa agendada para as 09:00 pode correr às 09:47 se o primeiro visitante do dia aparecer nessa hora

O que depende do WP-Cron

Muitas funcionalidades críticas dependem do WP-Cron funcionar regularmente:

  • Publicação de posts agendados
  • Backups automáticos (UpdraftPlus, BackupBuddy, etc.)
  • Cancelamento de encomendas WooCommerce com referências Multibanco expiradas
  • Emails automáticos WooCommerce (lembretes de carrinho abandonado, etc.)
  • Limpeza de transients e sessões expiradas
  • Verificação de atualizações de plugins
  • Algumas funcionalidades de plugins de SEO (re-crawl, etc.)

Como diagnosticar problemas com WP-Cron

WP-CLI (método mais rápido)

# Ver todas as tarefas agendadas
wp cron event list

# Ver tarefas em atraso
wp cron event list --fields=hook,next_run_relative --format=table

# Executar todas as tarefas em atraso manualmente
wp cron event run --due-now

# Testar se WP-Cron está funcional
wp cron test

Plugin WP Crontrol

WP Crontrol (gratuito, repositório oficial) oferece interface visual de todas as tarefas agendadas. Permite ver, adicionar, editar e executar tarefas manualmente. Útil para diagnóstico sem acesso SSH.

A solução: substituir WP-Cron por cron do sistema

Para sites críticos, a solução recomendada é desativar o WP-Cron pseudo-cron e usar um cron job real do servidor. Este cron chama o WP-Cron a intervalos definidos, independentemente do tráfego do site.

Passo 1: desativar WP-Cron nativo

Adicione ao wp-config.php:

define('DISABLE_WP_CRON', true);

Passo 2: criar cron job do sistema

Via crontab (SSH) ou cPanel → Cron Jobs, adicione:

# Correr WP-Cron a cada 5 minutos
*/5 * * * * curl -s https://seusite.pt/wp-cron.php?doing_wp_cron > /dev/null 2>&1

# Alternativa com WP-CLI (mais eficiente, sem HTTP request)
*/5 * * * * /usr/local/bin/wp cron event run --due-now --path=/var/www/wordpress --quiet

A abordagem via WP-CLI é preferível — evita um HTTP request externo e é mais eficiente em recursos.

Tarefas agendadas acumuladas: como limpar

Em sites com histórico de problemas de cron, podem acumular-se centenas ou milhares de tarefas em atraso na tabela wp_options (onde o WP-Cron armazena as tarefas). Isto pode causar lentidão na base de dados.

Via WP-CLI para ver tarefas pendentes:

wp cron event list | wc -l

Se houver um número anormalmente grande (centenas), investigue qual plugin está a agendar tarefas excessivamente. Frequentemente é um plugin de backup que falhou repetidamente e continua a reagendar.

WP-Cron e a manutenção mensal

Verificar o estado do WP-Cron deve ser parte da checklist mensal. Especificamente:

  • Confirmar que backups automáticos estão a correr (verificar data do último backup)
  • Verificar se há tarefas em atraso significativo
  • Para sites WooCommerce: confirmar que encomendas expiradas são canceladas automaticamente

Uma forma simples de verificar: confirmar no plugin de backup que existe um backup recente. Se o último backup tem mais de 48h num site com backups diários configurados, o WP-Cron pode estar com problemas.

Quer que monitorizemos a saúde técnica dos sites WordPress dos seus clientes?

O nosso serviço de manutenção WordPress inclui verificação mensal de WP-Cron, backups e todas as tarefas automatizadas.

Falar connosco