Monitoring WP-Cron WordPress

Maîtrisez la surveillance de WP-Cron pour un WordPress fiable

WordPress alimente plus de 40% des sites web dans le monde. Derrière chaque site WordPress se cache WP-Cron, le système de tâches planifiées qui gère tout : des publications programmées aux backups automatiques, en passant par l'envoi d'emails et les mises à jour de plugins. Quand WP-Cron cesse de fonctionner, les conséquences peuvent être désastreuses.

Contrairement au cron système Linux, WP-Cron ne fonctionne pas de manière autonome. Il dépend des visites du site pour s'exécuter, ce qui crée un problème fondamental : un site à faible trafic peut avoir des tâches en retard de plusieurs heures. De plus, les plugins de cache agressif peuvent bloquer complètement l'exécution de WP-Cron sans aucune alerte.

La solution recommandée consiste à désactiver le WP-Cron natif au profit d'un cron système, puis à surveiller ce cron avec MoniTao. Cette approche garantit une exécution fiable et prévisible de vos tâches WordPress, indépendamment du trafic de votre site.

Problèmes Courants de WP-Cron

Le mécanisme WP-Cron présente plusieurs limitations techniques qui impactent la fiabilité de vos tâches planifiées :

  • Dépendance aux visites : WP-Cron ne s'exécute que lorsqu'un visiteur charge une page. Un site avec peu de trafic peut voir ses tâches retardées de plusieurs heures, voire oubliées complètement.
  • Blocage par le cache : Les plugins de cache (WP Super Cache, W3 Total Cache, LiteSpeed) peuvent intercepter les requêtes et servir des pages statiques, empêchant WP-Cron de s'exécuter.
  • Impact sur les performances : WP-Cron vérifie et exécute les tâches en attente à chaque chargement de page, ajoutant une latence perceptible pour les visiteurs, surtout si des tâches lourdes sont déclenchées.
  • Accumulation de tâches : Si WP-Cron ne s'exécute pas pendant plusieurs heures, les tâches s'accumulent et peuvent toutes s'exécuter simultanément lors de la prochaine visite, surchargeant le serveur.

Bonne Pratique : Cron Système

La solution professionnelle consiste à remplacer WP-Cron par un cron système fiable :

  1. Désactiver WP-Cron natif : Ajoutez define('DISABLE_WP_CRON', true); dans votre fichier wp-config.php. Cela empêche WordPress de vérifier les tâches à chaque page load.
  2. Configurer le cron système : Ajoutez une entrée crontab qui appelle wp-cron.php toutes les 5 minutes : */5 * * * * wget -q -O /dev/null https://votre-site.com/wp-cron.php?doing_wp_cron
  3. Surveiller avec MoniTao : Créez un heartbeat MoniTao pour ce cron système. Si le cron ne s'exécute pas, vous serez alerté immédiatement au lieu de découvrir le problème des jours plus tard.

Tâches WordPress Critiques

Ces tâches WordPress dépendent de WP-Cron et nécessitent une surveillance particulière :

  • Publications programmées : Les articles planifiés à une date future ne seront publiés que si WP-Cron fonctionne. Un échec signifie un article resté en brouillon alors qu'il devait être en ligne.
  • Backups automatiques : Les plugins comme UpdraftPlus, BackWPup, ou Jetpack Backup planifient leurs sauvegardes via WP-Cron. Un WP-Cron défaillant signifie des backups manquants.
  • Emails et newsletters : Les plugins d'emailing (MailPoet, Newsletter, etc.) utilisent WP-Cron pour envoyer les emails par lots. Un blocage peut retarder vos campagnes de plusieurs heures.
  • Mises à jour automatiques : WordPress vérifie et applique les mises à jour de sécurité via WP-Cron. Un WP-Cron cassé peut laisser votre site vulnérable aux failles connues.

Exemple d'Intégration Heartbeat

Voici comment intégrer un heartbeat MoniTao directement dans vos tâches WordPress :

// Dans functions.php ou un plugin personnalisé

// Créer un hook personnalisé pour le heartbeat
add_action('monitao_hourly_heartbeat', 'monitao_send_heartbeat');

function monitao_send_heartbeat() {
    $ping_url = 'https://api.monitao.com/ping/votre-token';

    $response = wp_remote_post($ping_url, [
        'timeout' => 10,
        'body' => json_encode(['status' => 'ok']),
        'headers' => ['Content-Type' => 'application/json']
    ]);

    if (is_wp_error($response)) {
        error_log('MoniTao heartbeat failed: ' . $response->get_error_message());
    }
}

// Planifier le heartbeat (si pas déjà planifié)
if (!wp_next_scheduled('monitao_hourly_heartbeat')) {
    wp_schedule_event(time(), 'hourly', 'monitao_hourly_heartbeat');
}

Ce code crée une tâche WP-Cron qui ping MoniTao toutes les heures. Si le ping cesse d'arriver, MoniTao vous alerte que votre WP-Cron ne fonctionne plus. Vous pouvez adapter l'intervalle (hourly, twicedaily, daily) selon vos besoins.

Stratégies de Monitoring WordPress

Plusieurs approches complémentaires permettent de surveiller efficacement vos tâches WordPress :

  • Cron système + MoniTao : La méthode recommandée : votre cron système appelle wp-cron.php, puis ping MoniTao. Vous surveillez ainsi l'exécution du cron, pas directement WordPress.
  • Hook WordPress direct : Ajoutez un ping MoniTao à la fin de vos tâches critiques (backup, envoi newsletter) pour confirmer leur exécution effective.
  • Monitoring HTTP : Surveillez l'URL wp-cron.php avec un monitor HTTP MoniTao. Une erreur 500 ou un timeout indique un problème côté serveur.
  • Plugins de diagnostic : WP Crontrol ou WP-Cron Dashboard vous permettent de voir les tâches en attente et leur statut, mais ne remplacent pas un monitoring externe.

Débugger WP-Cron

Quand WP-Cron ne fonctionne pas comme attendu, utilisez ces techniques de diagnostic :

  • WP-CLI : La commande wp cron event list affiche toutes les tâches planifiées avec leur prochaine exécution. wp cron event run --due-now force l'exécution des tâches en retard.
  • WP Crontrol plugin : Ce plugin gratuit affiche une interface visuelle de toutes les tâches WP-Cron, permet de les exécuter manuellement, et de diagnostiquer les hooks problématiques.
  • ALTERNATE_WP_CRON : Si votre hébergeur bloque les appels loopback, ajoutez define('ALTERNATE_WP_CRON', true); dans wp-config.php pour utiliser une méthode de redirection alternative.
  • Logs serveur : Vérifiez access.log pour les appels à wp-cron.php et error.log pour les erreurs PHP. Un cron qui ne s'exécute pas n'apparaîtra pas dans les logs.

Checklist WP-Cron

  • Ajouter DISABLE_WP_CRON dans wp-config.php
  • Configurer le cron système pour appeler wp-cron.php
  • Créer un heartbeat MoniTao pour ce cron
  • Identifier toutes les tâches critiques (backups, emails)
  • Installer WP-CLI ou WP Crontrol pour le diagnostic
  • Tester manuellement une exécution de wp-cron.php

Questions Fréquentes

Mes articles programmés ne se publient pas à l'heure prévue. Pourquoi ?

WP-Cron n'a pas été déclenché entre le moment de la planification et l'heure de publication. Sans trafic sur votre site (ou avec un cache agressif), WP-Cron reste inactif. La solution : désactivez le WP-Cron natif et configurez un cron système qui appelle wp-cron.php toutes les 5 minutes.

WP-Cron ralentit mon site. Comment l'optimiser ?

WP-Cron natif s'exécute à chaque page load, ajoutant une latence. En ajoutant DISABLE_WP_CRON et en utilisant un cron système, vous supprimez complètement cette surcharge. Les visiteurs ne déclenchent plus les tâches planifiées, ce qui améliore significativement les temps de réponse.

Comment voir les tâches WP-Cron en attente et leur statut ?

Installez le plugin WP Crontrol depuis le repository WordPress. Il affiche toutes les tâches planifiées, leur hook, leur prochaine exécution, et permet de les exécuter manuellement. En ligne de commande, utilisez wp cron event list avec WP-CLI.

Mon backup UpdraftPlus ne s'exécute pas automatiquement. Que faire ?

UpdraftPlus dépend entièrement de WP-Cron. Vérifiez d'abord que WP-Cron fonctionne en consultant la page UpdraftPlus > Settings > Advanced. Si "Unable to use WP-Cron" apparaît, configurez un cron système. Surveillez ensuite ce cron avec MoniTao pour être alerté si les backups cessent.

Mon hébergement mutualisé ne permet pas les crons. Quelles alternatives ?

Plusieurs solutions existent : utilisez un service de cron externe gratuit (cron-job.org, EasyCron) pour appeler votre wp-cron.php, ou utilisez le mode ALTERNATE_WP_CRON qui contourne certaines limitations. MoniTao peut surveiller ces appels externes pour garantir leur fiabilité.

Comment savoir si WP-Cron fonctionne correctement ?

Créez un heartbeat MoniTao qui ping depuis une tâche WP-Cron (voir l'exemple de code). Si le ping s'arrête, WP-Cron est en panne. Vous pouvez aussi vérifier manuellement en appelant https://votre-site.com/wp-cron.php?doing_wp_cron dans votre navigateur et en vérifiant les logs serveur.

WordPress Fiable avec un Cron Surveillé

WP-Cron est un système simple mais fragile, conçu pour des sites à trafic régulier. Dans la réalité, de nombreux sites WordPress ont un trafic irrégulier ou utilisent des caches agressifs qui rendent WP-Cron peu fiable. Les conséquences vont des articles non publiés aux backups manquants.

La solution professionnelle combine un cron système fiable avec un monitoring externe MoniTao. Cette approche garantit que vos tâches WordPress s'exécutent selon le planning prévu, et vous alerte immédiatement en cas de problème. Commencez par surveiller vos tâches les plus critiques : backups et publications programmées.

Prêt à dormir sur vos deux oreilles ?

Commencez gratuitement, sans carte bancaire.