Les tâches CRON permettent de planifier des actions à des heures, dates ou intervalles fixes et réguliers sur votre site WordPress. Parmi les exemples de tâches CRON sous WordPress, on peut citer la programmation de la publication d’un article, la vérification des mises à jour ou l’exécution d’une extension de sauvegarde selon un calendrier prédéfini.

Dans WordPress, cette fonctionnalité est gérée par WP-Cron, qui sert à simuler un cron système. Cependant, en fonction du trafic généré par votre site, l’utilisation du gestionnaire de tâches cron intégré peut finir par avoir un impact sur les temps de chargement de vos pages.

Nous allons donc vous montrer aujourd’hui comment désactiver WP-Cron (wp-cron.php) et utiliser à la place un cron système pour améliorer les performances.

Pourquoi désactiver WP-Cron ?

Chez Kinsta, nous gérons de nombreux sites à fort trafic et très exigeants. C’est pourquoi nous avons constaté de nombreux problèmes de performances avec le gestionnaire Cron intégré à WordPress : WP-Cron.

Tout d’abord, il est important de comprendre que WP-Cron n’est pas une véritable tâche cron ; il s’agit simplement d’un outil créé par WordPress pour imiter le fonctionnement d’un cron système.

WP-Cron ne s’exécute pas en continu. Par défaut, wp-cron.php se déclenche à chaque chargement de page, ce qui peut poser des problèmes sur les sites à fort trafic. Si un site ne dispose pas d’un nombre suffisant de threads PHP, il arrive parfois qu’une requête soit reçue : WordPress lance alors le cron, mais celui-ci doit attendre le thread de travail et reste donc inactif.

Le scénario inverse est également valable. Si un site ne génère pas beaucoup de trafic, certaines tâches planifiées peuvent être manquées du fait que personne n’a chargé de page.

Par ailleurs, il existe également une raison de sécurité justifiant la désactivation de WP-Cron. Étant donné que le fichier wp-cron.php est accessible au public, n’importe qui peut le déclencher en envoyant une requête à l’adresse https://yourdomain.com/wp-cron.php.

Sur un site ciblé, cela peut servir à faire grimper la charge du serveur de manière répétée, ce qui constitue un moyen simple mais efficace de ralentir ou de déstabiliser un site. La désactivation de WP-Cron élimine complètement ce risque.

Désactiver WP-Cron dans WordPress (2 étapes)

Voici la marche à suivre (dans cet ordre) :

  1. Tout d’abord, configurez une tâche cron au niveau du serveur pour remplacer WP-Cron
  2. Ensuite, désactivez WP-Cron dans votre wp-config.php

Si vous désactivez WP-Cron sans avoir préalablement mis en place de solution de remplacement, vos tâches planifiées (planification d’articles, sauvegardes, vérifications de mise à jour des extensions, notifications par e-mail) cesseront de s’exécuter sans que vous vous en rendiez compte. Aucune erreur ne s’affichera, mais les tâches ne seront tout simplement pas exécutées.

Étape 1 : Configurer une tâche cron au niveau du serveur

Maintenant que vous comprenez pourquoi WP-Cron peut poser problème, voici comment le remplacer. La tâche cron système s’exécute selon un calendrier prédéfini et est même recommandée dans le manuel officiel de l’extension.

Choisissez la méthode qui correspond à la configuration de votre hébergement.

Utilisation de cPanel

Si vous utilisez un hébergeur proposant cPanel, vous pouvez créer une tâche Cron système depuis son panneau de contrôle. Commencez par vous connecter à cPanel. Dans la section « Avancé », cliquez sur « Tâches Cron ».

Tâches Cron cPanel
Tâches Cron cPanel

Dans la section « Ajouter une nouvelle tâche Cron », vous pouvez choisir parmi plusieurs plannings prédéfinis, tels que deux fois par heure ou une fois par semaine. Votre hébergeur impose très probablement une limite quant à la fréquence d’exécution des tâches Cron. Deux fois par heure est un réglage courant pour les hébergements mutualisés.

Réglages des tâches cron dans cPanel
Réglages des tâches cron dans cPanel

Ajoutez la commande suivante. Remplacez https://domain.com par votre nom de domaine. Cette commande peut varier légèrement en fonction de la configuration de votre hébergement. Cliquez ensuite sur « Ajouter une nouvelle tâche cron ».

wget -q -O - https://domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Ajouter une nouvelle tâche cron dans cPanel
Ajouter une nouvelle tâche cron dans cPanel

La partie >/dev/null 2>&1 de la commande ci-dessus désactive les notifications par e-mail.

Utilisation de SSH et de Crontab

Si vous disposez d’un accès SSH à votre serveur, vous pouvez configurer la tâche cron directement dans le fichier crontab de votre serveur. Cela fonctionne sur n’importe quel serveur sous Linux, quel que soit votre panneau de contrôle.

Connectez-vous via SSH et exécutez :

crontab -e

Ajoutez ensuite l’une des lignes suivantes (choisissez-en une).

Utilisation de wget (fonctionne sur n’importe quel serveur) :

*/15 * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Utilisation directe de PHP (légèrement plus rapide, sans surcharge HTTP) :

*/15 * * * * php /path/to/wordpress/wp-cron.php >/dev/null 2>&1

Remplacez yourdomain.com et /path/to/wordpress par votre domaine réel et le chemin d’accès à votre installation WordPress. */15 exécute la tâche cron toutes les 15 minutes, ce qui constitue un bon réglage par défaut pour la plupart des sites.

Utilisation de WP-CLI

Si vous utilisez WP-CLI, c’est souvent la méthode la plus simple. La commande cron intégrée à WP-CLI n’exécute que les tâches effectivement prévues, ce qui est plus efficace que d’appeler directement wp-cron.php. Ajoutez ceci à votre crontab via crontab -e :

*/15 * * * * cd /path/to/wordpress && wp cron event run --due-now --allow-root >/dev/null 2>&1

Vous pouvez également utiliser WP-CLI pour inspecter vos évènements planifiés à tout moment sans les exécuter :

wp cron event list

Cela s’avère utile pour le dépannage. Cette commande affiche tous les événements cron en attente, leur heure d’exécution prévue et le hook auquel ils sont associés.

Utilisation d’un outil tiers

Si vous n’êtes pas à l’aise avec la configuration des tâches cron sur votre serveur ou si votre hébergeur ne vous y donne pas accès, vous pouvez également utiliser une solution tierce telle qu’EasyCron.

Important : réseaux WordPress multisite

Sur un réseau multisite, le fonctionnement est légèrement différent.

WP-Cron doit s’exécuter individuellement pour chaque sous-site, et pas seulement pour le site principal. Si vous configurez une tâche cron sur un seul serveur pointant vers wp-cron.php sur le domaine principal, les tâches cron des sous-sites situés sur des domaines ou des sous-chemins différents risquent de ne pas se déclencher de manière fiable.

La solution la plus simple consiste à utiliser WP-CLI, qui prend en charge nativement les réseaux multisites :

*/15 * * * * cd /path/to/wordpress && wp cron event run --due-now --url=https://yourdomain.com --allow-root >/dev/null 2>&1

Pour les réseaux comportant de nombreux sous-sites, vous pouvez les parcourir tous à l’aide de la commande suivante :

*/15 * * * * cd /path/to/wordpress && wp site list --field=url | xargs -I % wp cron event run --due-now --url=% --allow-root >/dev/null 2>&1

La constante DISABLE_WP_CRON dans wp-config.php fonctionne de la même manière sur un réseau multisite : ajoutez-la une seule fois et elle s’applique à l’ensemble du réseau.

Étape 2 : désactiver WP-Cron dans wp-config.php

Pour désactiver WP-Cron, ajoutez ce qui suit à votre fichier wp-config.php, juste avant la ligne indiquant « C’est tout, arrêtez de modifier ! Bon blogging. »

define('DISABLE_WP_CRON', true);
Désactiver WP-Cron
Désactiver WP-Cron

Enregistrez le fichier et le tour est joué. WP-Cron ne se déclenchera plus lors du chargement des pages.

Cette constante empêche WP-Cron de s’exécuter lors du chargement des pages. Elle n’empêche pas l’appel direct de la fonction wp-cron.php. La tâche cron de votre serveur configurée à l’étape 1 pourra toujours la déclencher comme prévu.

Comment vérifier que tout fonctionne correctement

Une fois ces deux étapes terminées, il est recommandé de vérifier que WP-Cron est bien désactivé et que la tâche cron de votre serveur se déclenche correctement.

Option 1 : Utiliser le plugin WP Crontrol

Installez et activez l’extension gratuit WP Crontrol. Rendez-vous dans Outils → Évènements Cron dans votre tableau de bord WordPress. Vous verrez apparaître la liste de tous les évènements planifiés. Si WP-Cron est correctement désactivé, vous ne devriez plus voir d’évènements déclenchés à chaque chargement de page, mais uniquement aux intervalles auxquels la tâche cron de votre serveur s’exécute.

Option 2 : Vérification via WP-CLI

Exécutez cette commande depuis votre serveur :

wp cron event list

Cela affiche tous les évènements cron en attente avec leur prochaine heure d’exécution prévue. Si la liste semble normale et que les évènements disparaissent entre deux exécutions, votre configuration fonctionne correctement.

Option 3 : Vérifier les journaux de votre serveur

Si vous avez configuré une entrée crontab, vous pouvez rediriger temporairement sa sortie vers un fichier journal afin de vérifier qu’elle se déclenche bien :

*/15 * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >> /tmp/wpcron.log 2>&1

Consultez le fichier /tmp/wpcron.log au bout de 15 minutes pour vérifier que la tâche s’est bien exécutée. Une fois cela confirmé, supprimez la redirection vers le fichier journal.

Résumé

Désactiver WP-Cron et le remplacer par une véritable tâche cron au niveau du serveur est une modification simple qui améliore la fiabilité, réduit la charge système et supprime un point de terminaison public inutile.

Vous pouvez également éviter la majeure partie de la configuration en choisissant un hébergeur qui s’en charge pour vous. Les hébergeurs infogérés tels que Kinsta exécutent par défaut une tâche cron côté serveur toutes les 15 minutes ; il vous suffit donc de désactiver WP-Cron et de laisser la plateforme s’occuper du reste.

Brian Jackson

Brian a une grande passion pour WordPress, l'utilise depuis plus de dix ans et développe même quelques plugins de qualité. Brian aime les blogs, les films et les randonnées. Connectez avec Brian sur Twitter.