Skip to content

Tudo para WordPress, desenvolvimento web — e não só

🔧 Como corrigir o erro de agendamento falhado no WordPress: 3 métodos que funcionam

🔧 Como corrigir o erro de agendamento falhado no WordPress: 3 métodos que funcionam

Programa o alarme para as oito da manhã porque um artigo importante é publicado na segunda-feira. Preparou-o durante o fim de semana, agendou-o no painel de administração do WordPress e foi dormir descansado. Chega terça-feira, abre o site e nada. Ao lado do título, no painel de administração, vê: «Missed schedule».

Parece-lhe familiar? Só no último ano, os fóruns de suporte do WordPress em russo discutiram este problema mais de trezentas vezes. O problema não é o seu painel de administração, nem o seu alojamento, nem os seus plugins. É uma peculiaridade arquitetónica do próprio WordPress.

Aqui estão três formas de resolver isto de uma vez por todas, da mais rápida à mais fiável. Sem invocações de cron, sem edições cegas ao ficheiro wp-config.php e sem a desculpa do «publico manualmente e pronto».

💡 Visão geral rápida:

  • Instale o Missed Schedule Post Publisher para publicação automática de artigos perdidos (dois minutos para configurar)
  • Substitua o WP-Cron pelo cron do servidor para uma solução radical e independente do tráfego
  • Instale o WP Crontrol para supervisão manual (mostra todos os eventos cron e permite executar qualquer um manualmente)

Porque é que o WordPress falha o agendamento de artigos

O WordPress não usa um cron de sistema real. Em vez disso, depende de um mecanismo chamado WP-Cron, um pseudo-cron que não é acionado por um temporizador do servidor, mas sim quando um visitante acede ao site.

Funciona assim. Quando agenda um artigo para as 09:00, o WordPress escreve a tarefa na base de dados. Mas só pode executar essa tarefa se alguém visitar o site por volta das 09:00. Um visitante chega, o WordPress verifica a lista de tarefas e publica o artigo. Sem visitante, a tarefa fica pendente e você vê a mensagem «Missed schedule».

Para sites com 500 a 1.000 visitantes diários, o WP-Cron funciona de forma aceitável: é quase certo que alguém vai clicar no momento certo. Mas se tem um blogue recente, um projeto de nicho ou publica artigos durante a noite (no seu fuso horário), o WP-Cron falha regularmente. Junte a isto os plugins de cache: o WP Rocket, o W3 Total Cache ou a Cloudflare podem servir páginas em cache sem invocar o WordPress de todo, pelo que as tarefas cron não são executadas durante horas.

É por isso que o erro «Missed schedule» é sistémico e não aleatório. A solução não é reagendar o artigo manualmente, mas sim uma das três abordagens abaixo.

Os três métodos abordam cenários diferentes. O primeiro, instalar um plugin leve de publicação automática, resolve o problema para a grande maioria dos utilizadores em dois minutos. O segundo, mudar para o cron do servidor, oferece fiabilidade ao nível da infraestrutura, independentemente do tráfego. O terceiro, um painel de controlo manual, é útil para quem quer ver cada tarefa cron pelo nome e executá-la manualmente. Pode começar com o primeiro e adicionar o terceiro mais tarde para uma total tranquilidade.

A trabalhar em conteúdo de website num portátil

Método 1: o plugin Missed Schedule Post Publisher, simples e fiável

A forma mais rápida de resolver esta questão é instalar um plugin especializado. Historicamente, usava-se o WP Missed Schedule, mas foi removido do diretório WordPress.org em 2017 e a versão do GitHub continha uma backdoor. Não o instale em circunstância alguma.

O substituto atual é o Missed Schedule Post Publisher. Este plugin tem um único propósito: verificar se um artigo agendado está bloqueado e publicá-lo no momento em que é detetado.

Como se diferencia do seu antecessor extinto:

  • Funciona via WP-Cron e simultaneamente através de visitas ao site; se o alojamento desativar o WP-Cron, o plugin muda automaticamente

  • Intervalo de verificação configurável: 5, 10, 15, 20, 30 ou 60 minutos

  • Impacto zero no desempenho (uma consulta leve à base de dados)

  • Compatível com WP Rocket, W3 Total Cache e Cloudflare

  • Não cria uma inundação de eventos cron extra; verifica apenas publicações perdidas

A instalação é padrão: Plugins → Adicionar Novo → pesquisar por «Missed Schedule Post Publisher» → Instalar → Ativar. Após a ativação, vá a Definições → Missed Schedule Post Publisher e escolha o seu intervalo de verificação. Para a maioria dos sites, 10 a 15 minutos é o ideal.

O plugin não requer supervisão manual. Instale-o, defina o intervalo e verifique o resultado após um dia: vá a Artigos → Todos os Artigos e confirme que a etiqueta «Missed schedule» desapareceu. A partir daí, funciona silenciosamente e com fiabilidade.

Para comparação, o antigo WP Missed Schedule (removido do diretório WordPress.org em 2017, e a versão do GitHub continha uma backdoor) tinha este aspeto no painel de administração. Se por acaso vir este plugin na sua lista de instalados, elimine-o imediatamente e substitua-o pelo Missed Schedule Post Publisher.

Plugin WP Missed Schedule obsoleto na lista de plugins instalados do WordPress

Método 2: cron do servidor em vez do WP-Cron, uma solução radical

Este método é mais técnico, mas oferece 100% de fiabilidade: desativa o WP-Cron e anexa a chamada ao wp-cron.php ao cron do sistema do servidor.

O cron do sistema é executado de acordo com o agendamento do sistema operativo, independentemente do tráfego do site. Se definir um intervalo de 5 minutos, a tarefa é executada exatamente em 5 minutos, mesmo que o site tenha zero visitantes.

O que precisa de fazer:

  • Abra o wp-config.php e adicione a seguinte linha antes de /* That's all, stop editing! */:
1define('DISABLE_WP_CRON', true);

Isto impede que o WordPress execute tarefas cron nas visitas ao site. As tarefas em si não desaparecem; permanecem na base de dados e aguardam uma chamada externa.

  • No seu painel de alojamento, encontre a secção «Cron Jobs» (cPanel → Cron Jobs, ISPmanager → Agendador, ou equivalente). Crie uma tarefa com um intervalo de 5 a 10 minutos e este comando:
1wget -q -O - https://your-site.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Se o servidor suportar PHP CLI, aqui está uma alternativa que é mais rápida e não carrega o servidor web:

1php /home/username/public_html/wp-cron.php
  • Guarde a tarefa. Após 10 minutos, verifique os registos do cron; se não houver erros, o sistema está a funcionar.

Bónus: desativar o WP-Cron através de DISABLE_WP_CRON elimina o atraso parasita durante o carregamento das páginas para os visitantes. O WordPress deixa de acionar tarefas cron durante a navegação normal, por isso as páginas abrem um pouco mais rápido.

Este método tem uma desvantagem: o acesso às definições de cron não está disponível em todos os alojamentos. Alojamentos partilhados baratos por vezes bloqueiam a criação de tarefas cron. Nesse caso, recorra ao método 1; o Missed Schedule Post Publisher foi concebido precisamente para essas limitações e funciona sem o cron do sistema.

Método 3: inspeção manual via WP Crontrol, controlo total

O terceiro método é para quem quer ver tudo o que acontece nos bastidores. O WP Crontrol é um gestor de eventos cron diretamente no painel de administração. Não publica artigos por si só, mas mostra quais as tarefas agendadas, quando deveriam ter sido executadas e o que correu mal.

O que o WP Crontrol oferece:

  • Uma lista completa de todos os eventos cron com hook, argumentos e hora da próxima execução

  • A capacidade de executar qualquer evento imediatamente com um único clique

  • Editar e eliminar eventos cron

  • Adicionar novos eventos e agendamentos personalizados

  • Um aviso se o sistema cron não estiver a funcionar (o servidor não consegue ligar-se a si próprio)

Após a instalação, vá a Ferramentas → Eventos Cron. Verá uma tabela com todas as tarefas. Se um artigo estiver «bloqueado», encontre o evento com o hook publish_future_post, clique em «Executar Agora» e o artigo aparecerá no feed num segundo.

O WP Crontrol é especialmente útil para depuração: pode ver se um plugin criou centenas de eventos cron extra (acontece), se a fila de tarefas está congestionada ou se há um conflito entre plugins. A coluna «Próxima Execução» mostra quando o evento deve ser executado a seguir; se a data estiver no passado, a tarefa está bloqueada. A coluna «Recorrência» indica com que frequência o evento se repete; repetições anormalmente frequentes (a cada minuto) apontam quase sempre para um plugin problemático.

Por si só, no entanto, o WP Crontrol não previne o erro «Missed schedule»; apenas ajuda a diagnosticar e a resolver manualmente as consequências. Depois de executar manualmente uma publicação bloqueada, o artigo fica online instantaneamente, mas a situação repetir-se-á da próxima vez, a menos que resolva a causa ao nível do método 1 ou 2.

Painel de gestão de eventos cron do WordPress no plugin WP Crontrol

Melhor combinação: método 1 (plugin de publicação automática) + método 3 (WP Crontrol para supervisão). O publicador automático trata dos artigos perdidos e o WP Crontrol permite-lhe verificar de relance que a fila do cron está limpa e que tudo está a funcionar normalmente.

⁉️🤔 Perguntas frequentes

Porque é que o WordPress não usa um cron normal como qualquer outro sistema normal?

Os programadores do WordPress escolheram deliberadamente o modelo de pseudo-cron porque não requer configuração do lado do servidor. Um utilizador instala o WordPress em qualquer alojamento e a publicação agendada funciona de imediato, sem SSH ou edições de configuração. O preço dessa conveniência é a falta de fiabilidade em sites com pouco tráfego. O WP-Cron é executado em cada pedido ao site e, se não houver pedidos no momento certo, a tarefa não é executada. Esta é uma troca arquitetónica e, para artigos com hora crítica, não é suficiente.

Que método devo escolher se não percebo de servidores?

Missed Schedule Post Publisher (método 1). A instalação demora dois minutos através do painel de administração; a configuração consiste em selecionar um intervalo num menu suspenso. Sem código, sem SSH, sem edições ao wp-config.php. O plugin deteta por si próprio se o WP-Cron está ativado no servidor e adapta-se.

O erro pode estar relacionado com o fuso horário do WordPress?

Sim, e verifique isto primeiro. Vá a Definições → Geral → Fuso Horário e certifique-se de que selecionou o fuso horário correto da cidade, em vez de um deslocamento UTC manual. Um deslocamento UTC+X não tem em conta a hora de verão; duas vezes por ano, o agendamento «desvia-se» uma hora e os artigos são publicados em horas inesperadas.

A cache afeta os artigos perdidos?

Diretamente, sim. Os plugins de cache (WP Rocket, W3 Total Cache, WP Super Cache) e as CDNs (Cloudflare) podem servir aos visitantes uma página HTML finalizada sem iniciar o núcleo PHP do WordPress. Se o WP-Cron não for chamado, as tarefas não são executadas. O Missed Schedule Post Publisher (método 1) contorna este problema funcionando tanto via cron como através de visitas ao site que ignoram a cache. O cron do servidor (método 2) não é afetado pela cache de todo.

O que devo fazer se o meu alojamento bloquear a capacidade de criar tarefas cron?

Use o método 1: Missed Schedule Post Publisher. Foi concebido exatamente para esta situação; funciona através do WP-Cron integrado e, se este estiver desativado, muda automaticamente para a verificação nas visitas ao site. Não perde funcionalidade; a verificação simplesmente acontece com um pouco menos de frequência (nas visitas, em vez de estritamente num temporizador).

O que instalar hoje

O problema do «Missed schedule» não se resolve com reagendamento manual; isso é como pintar por cima de uma fissura num cano. Precisa de um plugin de publicação automática (dois minutos e depois esquece) ou do cron do servidor (um pouco mais de tempo e depois esquece para sempre).

Se tem um blogue típico ou um site empresarial num alojamento médio, comece com o Missed Schedule Post Publisher. Defina um intervalo de 10 minutos, cinco cliques no painel de administração e o problema fica resolvido. Se quiser garantias ao nível da infraestrutura, configure o cron do sistema. Adicione o WP Crontrol para supervisão e só se lembrará dos artigos perdidos em conversas sobre «como as coisas eram antigamente».

Um dia após a instalação, entre no painel de administração e verifique o artigo agendado mais próximo. Se foi publicado a horas, o sistema está a funcionar. Se não, abra o WP Crontrol e veja se a tarefa publish_future_post está pendente sem ser executada; isso aponta para um problema de cron mais profundo no servidor, que o método 2 resolverá.