La planification des tâches sous WordPress utilise un système de cron. Ce système a besoin d’un déclencheur. La configuration des hébergeurs étant très variables, le cron WordPress a besoin d’un mécanisme indépendant. C’est donc l’arrivée de l’internaute qui déclenche le cron.
Si cette astuce a le mérite de s’affranchir du serveur, elle peut toutefois poser des problèmes aux sites très fréquentés comme à ceux qui le sont peu. Dans un cas le cron sera sollicité trop souvent, dans l’autre trop rarement.
Voyons pourquoi et comment corriger ce problème.
Pour qui ? Cet article s’adresse aux personnes qui commencent à maîtriser la partie administration système de WordPress, c’est-à-dire ce qui concerne l’installation, la sauvegarde, le clonage de site, la sécurisation…
Pourquoi ? J’en suis venu à rédiger cet article car, bien qu’ayant trouvé sur internet des didacticiels indiquant comment mettre en place un cron, ils ne m’ont pas permis de comprendre pourquoi cela ne fonctionnait pas chez moi.
Comment ? Il m’a fallu lire des dizaines d’articles pour arriver à trouver ce qui clochait. J’ai donc réuni ici tout ce qu’il me semblait nécessaire de savoir sur ce sujet. J’espère permettre à d’autres de gagner du temps dans la prise en main du cron WordPress.
Pas besoin d’explication, je veux juste voir le mode opératoire.
Au commencement était le cron
Cron est une abréviation de crontab, elle-même une abréviation de chrono table qui signifie table de planification (de Chronos, dieu grec du temps).
Issue du monde Unix, le programme cron, lancé au démarrage d’un système d’exploitation, permet de planifier l’exécution automatique de tâches avec une certaine fréquence ou à un moment donné. Le cron se cale sur l’horloge du serveur, elle-même synchronisée avec une horloge atomique.
En pratique le cron vérifie toutes les minutes sa liste de tâches, la crontab. Celle-ci contient les tâches à exécuter et leur horaire d’exécution avec éventuellement une périodicité.
Le moment est venu, cron lance l’exécution de l’action en attente.

Tous les systèmes d’exploitation (Unix, Linux, Mac, Windows…) utilisent un système de planification de tâches de type cron.
Il faut donner du cron à WordPress
Vérifier les mises à jour du cœur, des extensions et du thème, publier un article… WordPress a besoin de gérer des tâches récurrentes. Par ailleurs, les extensions peuvent elles aussi avoir besoin d’activer leurs fonctionnalités de façon récurrente et automatique : lancer une sauvegarde, envoyer un lot de newsletters.
Cette fonctionnalité est mise en œuvre à travers un cron WordPress qui repose sur deux scripts PHP /wp-cron.php et /wp-includes/cron.php
En tête du fichier /wp-cron.php :
<?php
/**
* Un daemon pseudo-cron pour planifier les tâches de WordPress.
*
* WP-Cron est déclenché lorsque le site reçoit une visite. Dans le scénario
* où un site peut ne pas recevoir assez de visites pour exécuter les tâches
* programmées en temps voulu, ce fichier peut être appelé directement ou
* via un daemon cron depuis un serveur pour un nombre X de fois.
*
* Définir DISABLE_WP_CRON à « true » et appeler ce fichier directement sont
* mutuellement exclusifs et le dernier ne dépend pas du premier pour fonctionner.
*
* La requête HTTP vers ce fichier ne ralentira pas le visiteur présent lorsqu'un
* événement cron planifié s'exécute.
*
* @package WordPress
*/
Cron WordPress : allô Houston…
Ce mécanisme peut poser des problèmes en cas d’affluence (déclenchement trop fréquent du cron WordPress) tout comme si le site connaît une faible fréquentation (les tâches planifiées sont exécutées en retard).
Cela dit, les tâches qui ne sont pas exécutées au moment voulu ne sont pas perdues. Elles sont placées dans liste d’attente. Problème : quand la liste est bien remplie, l’internaute qui déclenche le cron va encaisser un gros ralentissement du site.
Nous allons voir comment régler ce problème en mettant en place un système régulier et qui ne pénalise pas les internautes.
Mise en œuvre de solutions
Note : Inutile de préciser que ce didacticiel s’adresse aux personnes qui utilisent un hébergement mutualisé. Le cron n’a pas de secret pour celles et ceux qui gèrent un serveur dédié.
Cela va consister à désactiver le cron WordPress par défaut puis activer un cron serveur.
Désactiver wp-config.php
Pour cela, ajoutez la ligne suivante dans le fichier /wp-config.php.
...
/** Stop du cron WordPress **/
define('DISABLE_WP_CRON', true);
/* C'est tout, ne touchez pas à ce qui suit ! Bon blogging ! */
...
Cela évite le déclenchement du cron par deux systèmes concurrent (visites et cron serveur).
Cette modification peut perturber certaines extensions. Vous verrez alors un message qui indique que le cron est désactivé.
WP Crontrol
La constante DISABLE_WP_CRON est définie à « true ». Le déclenchement de WP-Cron est désactivé.
ou Updraft+
Attention : Le planificateur de sauvegarde est désactivé dans votre installation WordPress, par le biais du réglage DISABLE_WP_CRON. Aucune sauvegarde ne pourra débuter (même la sauvegarde immédiate) tant que vous n'aurez pas paramétré un moyen de lancer le planificateur manuellement ou tant que vous ne l'aurez pas activé.
02/2019 : L’extension Disable Admin WP Cron Notice For UpdraftPlus a pour vocation de supprimer cette note.
03/2022 : Updraft+ ne semble plus afficher ce message.
Ces message sont perturbants, car ils donnent l’impression que le cron ne va plus fonctionner. En activant correctement un cron externe, ce ne sera pas le cas.
Activer un cron externe à WordPress
Deux cas de figure, selon que votre hébergeur propose ou non un service de planification de tâches.
1 – Hébergeur avec planificateur (tâches cron)
Quel que soit votre hébergeur (OVH, o2switch…), il faudra deux informations : la fréquence et la commande à lancer.

Fréquence
La fréquence devra être ajustée à la tâche qui se produit le plus souvent, sachant que la fréquence ne peut pas être inférieure à la minute.
En général, un déclenchement toutes les 30 minutes devrait suffire. Pour un site WooCommerce on recommande toutes les 5 minutes.
Note : OVH ne permet pas une fréquence inférieure à l’heure, tandis qu’o2switch descend à la minute.
Pour connaître la liste des tâches de votre site et leur fréquence, utilisez l’extension WP Crontrol ou Advanced Cron Manager – debug & control.
Commande
Là aussi, deux possibilités :
a) Lancer le fichier avec PHP
Cette méthode serait la plus efficace en terme de performance. Pour en savoir plus, je vous conseille de lire Running WordPress Cron via PHP-CLI (article en anglais).
Pour lancer le script directement en PHP, il faut que le service de tâches planifiées soit exécuté sur le même serveur que le site.
/usr/bin/php /chemin/dossier_wordpress/wp-cron.php
Chez o2switch, la commande pour le site par défaut est :
cd ~/public_html/; /usr/local/bin/php -q wp-cron.php > ~/logs/wp-cron-www.log 2>&1
Chez o2switch, le dossier « ~/public_html/ » contient les fichiers et dossiers de WordPress. C’est la racine du site. Le dossier ~/logs/ permet de stocker les fichiers de log.
Le signe « ~ » désigne le dossier racine de votre hébergement. Attention la racine de l’hébergement est différente de la racine du/des site(s).
Astuce : en phase de test, réglez la fréquence à 1 minute puis vérifiez dans ~/logs/ si le fichier wp-cron-www.log a été créé ou modifié. Si c’est le cas vous pouvez repasser la fréquence à une valeur supérieure.
Chez OVH faire pointer la tâche sur /répertoire_de_wordpress/wp-cron.php. OVH fourni un didacticiel pour configurer le système de tâches planifiées.

Note : certains disent que les droits du fichier wp-cron.php doivent le rendre exécutable (755), d’autres que ce n’est pas nécessaire (644). Pour ma part, j’ai opté pour 644. Testez.
b) Lancer le script avec une URL
Cela permet de lancer la commande depuis un serveur qui n’est pas obligatoirement celui qui héberge le site. Il arrive aussi que le déclenchement avec PHP pose des problèmes sur certains serveur. L’appel depuis l’URL semble être une solution plus sûre.
Merci à Renaud Pacouil pour son aide dans la résolution du blocage de cron auquel j’étais confronté ainsi que pour l’info sur la liste hackrepair.com qui ne bloque plus wget.
Le programme utilisé peut être wget ou curl selon votre hébergeur ou le service de cron (voir la documentation de votre fournisseur).
wget -q https://www.example.com/wp-cron.php
Le cron du site est lancé en mode silencieux (-q). Il n’affiche pas de message.

wget -q https://www.example.com/wp-cron.php -O ~/logs/wp-cron-www.log
Le cron du site est lancé et les logs sont écrits dans ~/logs/wp-cron-www.log. Avec l’option « -O » les logs sont écrasés à chaque écriture, avec « -a » les logs sont cumulés.
Avec certaines extensions de sécurité ou les pare-feux d’hébergeur, la commande wget est bloquée. Elle peut être remplacée par curl.
curl -s https://www.example.com/wp-cron.php
avec logs
curl -v https://www.example.com/wp-cron.php > ~/logs/wp-cron-www.log 2>&1
Vous pouvez tester l’appel à l’URL avec curl ou wget dans une console.
user@host:~$ wget http://www.example.com/wp-cron.php?doing_wp_cron
--2016-03-08 14:09:16-- http://www.example.com/wp-cron.php?doing_wp_cron
Résolution de www.example.com (www.example.com)… 213.187.33.20
Connexion à www.example.com (www.example.com)|213.187.33.20|:80… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Le code 200 indique une connexion réussie.
user@host:~$ wget http://www.example2.com/wp-cron.php?doing_wp_cron
--2016-03-08 14:09:38-- http://www.example2.com/wp-cron.php?doing_wp_cron
Résolution de www.example2.com (www.example2.com)… 104.78.54.15, 104.78.54.15
Connexion à www.example2.com (www.example2.com)|104.78.54.15|:80… connecté.
requête HTTP transmise, en attente de la réponse… 403 Forbidden
2016-03-08 14:09:39 erreur 403 : Forbidden.
Le code 403 indique une erreur.
En l’occurrence, il s’agissait d’un blocage de wget par l’extension iThemes Security.
Attention : si vous utilisez iThemes Security, la liste noire de HackRepair.com bloque wget. Il faut alors utiliser curl ou retirer le blocage de wget dans le fichier .htaccess.
Mise à jour 03/2022 : la liste HackRepair ne bloque plus wget.
2 – Hébergeur sans planificateur
Quelques services spécialisés dans la planification de tâches cron.
![]() | easycron.com | Gratuit ou 12$ à 120$/an |
![]() | setcronjob.com | 20$ à 100$ |
![]() | cron-job.org | gratuit |
![]() | webcron.org | 0.001€/lancement |
![]() | cronoo | 1 000 crédits puis 0.0001€/lancement |
Certaines offres gratuites permettent de tester le service.
En ce qui concerne EasyCron (seul fournisseur que j’ai testé), il n’est pas possible d’activer les logs dans l’offre gratuite, ce qui rend difficile l’analyse quand cela ne fonctionne pas. De plus, il semblerait que certains appels au cron retournent une erreur (par exemple si le serveur de votre site a un problème ponctuel ou s’il met du temps à répondre). Dans ce cas, EasyCron désactive la tâche.
Une autre option passe par l’utilisation de IFTT. Voir le mode opératoire.
Si vous utilisez ces services ou d’autres, merci de laisser un commentaire. Je les ajouterai à cet article si besoin.
Alors, ça fonctionne ?
Pour voir si tout va bien, il faut attendre qu’un premier cycle se soit écoulé, vérifier que la prochaine tâche planifiée a bien été exécutée, puis regarder dans les logs de l’hébergeur si la tâche cron a été lancée.
[2016-03-07 00:43:03] ## OVH ## START - 2016-03-07 00:41:03.637658 executing: /usr/local/php5.6/bin/php /homez.xx/moncompte/www/wp-cron.php [2016-03-07 00:43:03] [2016-03-07 00:43:03] ## OVH ## END - 2016-03-07 00:41:05.442767 exitcode: 0 [2016-03-07 01:43:03] ## OVH ## START - 2016-03-07 01:41:03.534382 executing: /usr/local/php5.6/bin/php /homez.xx/moncompte/www/wp-cron.php [2016-03-07 01:43:03] [2016-03-07 01:43:03] ## OVH ## END - 2016-03-07 01:41:05.225793 exitcode: 0 .
La tâche a été lancée à 01h43 et « exitcode: 0 » indique qu’elle s’est bien passée.
Cas particuliers
Certaines extensions comme MailPoet proposent d’activer leur propre cron.
Il semblerait que la mise en maintenance d’un site désactive le cron WordPress.
Pour aller plus loin…
- Codex WordPress : Hooking WP-Cron Into the System Task Scheduler
- Codex WordPress : wp_cron
- Codex WordPress : les fonctions du cron
- Codex WordPress : wp_schedule_single_event
- Explication (en anglais) de Samuel Wood (Otto) sur le fonctionnement du cron WordPress
- Conférence « Prenez le crontrol des tâches planifiées » de Jonathan Buttigieg. Aborde l’aspect programmation du cron
- Ben Lobaugh : Article très complet
- WP Formation : Qu’est-ce que le CRON de WordPress ?
- Automatiser des logiques WordPress en arrière-plan avec un Cron ou Action Scheduler : Pierre Saïkali
et enfin…
- WP Mayor : Best Cron Plugins for WordPress
Ca ne fonctionne pas chez O2Switch
Même avec l’aide du support
Bonjour Fulano,
C’est étonnant.
En ce qui me concerne, ça à l’air de fonctionner.
Voici mes réglages :
– Paramètres communs : Deux fois par heure(0,30 * * * *)
– Commande : curl -I https://100son.net/wp-cron.php?doing_wp_cron >/dev/null 2>&1
A adapter en fonction du site à déclencher.
Bonjour,
J’ai configuré une tâche cron avec « 14 3 * * 3 » et « .wp-site/wp-cron.php » sur un hébergement OVH pour déclencher une tâche de backup (avec BackWPup) une fois par semaine, le mercredi à 3H14. Celle-ci ne semble pas se déclencher (peut être parce que je n’ai pas désactivé le cron de WP dans le wp-config).
Mais si je désactive le cron de WP avec la commande « define(‘DISABLE_WP_CRON’, ‘true’); » dans wp-config, que se passera-t’il pour les autres tâches (vérification des mises à jour entre autres) ?
Avec « 14 3 * * 3 », l’ensemble des tâches WordPress ne seraient lancées qu’une fois par semaine si le cron de WordPress était désactivé, ce n’est probablement pas souhaitable. Il faudrait les lancer bien plus souvent. Et activer un cron externe en parallèle de celui de WordPress n’a pas beaucoup de sens non plus, à moins que le site ne reçoive qu’un très faible trafic (en l’occurrence, moins d’une visite par semaine). Donc, le mieux serait de désactiver le cron de WordPress, d’activer un cron à une fréquence raisonnable qui lancera toutes les tâches prévues et de configurer… Lire la suite »
Bonjour,
Merci Carl pour cette réponse à laquelle je souscris. 🙂
Bonjour,
Excusez-moi, je ne comprends pas, il faut ajouter la ligne de commande dans le fichier wp-cron.php ?
Si oui, à chaque mise à jour de WP, cela sera effacé, il faudra recommencer.
Merci
Re Bonjour,
Pardon, mais la commande d’exemple là,
curl -I https://100son.net/wp-cron.php?doing_wp_cron >/dev/null 2>&1</code
Il faut la mettre dans wp-config.php ?
Je ne pensais que mettre que ce code
/** Stop du cron WordPress **/
define('DISABLE_WP_CRON', true);
Merci
ps: dommage pas d’option de notification pour les commentaires
Bonjour,
Merci, sur OVH, pas possible de régler les minutes ?
Merci
Bonjour,
Non, c’est une des raisons qui m’ont poussé à passer chez o2switch.
Regardez leur offre. De plus ils feront la migration de votre site.
Bonne journée,
Re bonjour Hervé,
La commande
curl -I https://100son.net/wp-cron.php?doing_wp_cron >/dev/null 2>&1
est à placer dans la tâche cron chez l’hébergeur.
P.S. : je viens d’ajouter un système d’abonnement aux commentaires.
Bonjour,
Le fichier à modifier est
wp-config.php
.Bonne journée,
Bonjour J’ai un theme/plugins pour Wp qui demande des taches cron pour poster sur des réseaux sociaux des posts. Le problème c’est que ça ne fonctionne pas, que ce soit pour Pinterest ou Instagram. Le plugin parle de wget et curl mais mon hébergeur 1and1 lui met directement l’Url du Blog sur lequel j’ajoute la suite du lien vers les fichiers correspondants à Pinterest et Instagram mais rien n’est posté sur ces reseaux. sur le plugin, je met aussi comme demandé les identifiants de connexion à ces 2 là. Si vous avez des idées je prends car je ne sais… Lire la suite »
Bonjour Jean-Luc,
Je vous conseille tout d’abord de contacter le support de votre thème / extension. Si cela n’est pas suffisant, voyez ensuite avec le support de 1&1.
Bonne journée,
Bonjour, J’ai plusieurs WordPress sur hostpapa. Ils m’ont conseillé de mettre en place un vrai cron et je me suis appuyé sur votre article qui est très bien. Par contre, les commandes qu’ils proposent pour lancer le script ne fonctionnent pas : /usr/local/bin/php /home/user/public_html/wp-cron.php. J’ai tenté de créer un WordPress test où je n’ai fait que les modifications pour mettre en place le vrai cron et ça ne fonctionne pas. Je ne reçois aucun mail du vrai cron et les tâches ne sont pas lancées. Auriez-vous idée du type de commandes qu’il faut pour lancer le script wp-cron.php , s’il… Lire la suite »
Bonjour,
Ne connaissant pas l’arborescence de Hostpapa, je ne vais pas pouvoir répondre à ce cas précis.
Le support de votre hébergeur devrait être en mesure de vous aider. Si ce n’est pas le cas, je vous recommande de passer chez o2switch. Ils ont un support très efficace.
Bonne fin d’année,
Salut ! Je travaille sur un site bigbuy woocommerce hébergé chez ovh, cependant je suis coincé avec le paramétrage du Cron. J’ai vu pas mal de tuto mais ce ne marche pas et je n’avance pas. EN outre, bigbuy demande en min et chez ovh ce n’est pas possible. Donc du coup, je peux pas avancer. besoin de l’aide
Bonjour,
En effet, le cron d’OVH ne permet pas un réglage à la minute.
Je ne peux que vous inviter à changer d’hébergeur. o2switch est une excellent option. Leur hébergement est géré par cPanel et possède une interface avancée pour régler le cron. Enfin, le support est non seulement réactif, mais aussi très compétent. Cela devrait résoudre votre problème.
Dernier point, les techniciens d’o2switch peuvent se charger de la migration de votre site.
Bonne journée,
Bonsoir
Merci pour votre article.
J’ai un probleme si vous pouvez m’aider svp.
je lance /usr/bin/php /chemin/complet/wp-cron.php …. mais j’ai une erreur de :
No such file or directory /var/run/mysqld/mysqld.sock
ma base de données est hebergé sur un autre serveur, au local je n’ai pas de sql.
je ne comprend pas pourquoi le cron essai de se connecter au local au lieu de faire la chose comme si je suis sur le navigateur.
Merci
Bonsoir,
Dans ce type de situation il vaut mieux s’adresser au support de votre hébergeur.
Bonne soirée,
Bonjour,
Merci beaucoup pour l’article il m’a fait gagner beaucoup de bande passante, mon cron s’exécutait par défaut toutes les secondes… Un petit point de vigilance pour les lecteurs bien placer, dans le fichier wp-config.php : define(‘DISABLE_WP_CRON’, true);
Au dessus de la phrase, déjà existante dans le fichier :
/* C’est tout, ne touchez pas à ce qui suit ! Bon blogging ! */
Ou en anglais
/* That’s all, stop editing! Happy blogging. */
Et non à la fin du fichier. Je me suis fait avoir 🙂
Bonjour Cyrille et merci pour ce chouette tuto ! J’ai paramétré mon cronjob sur mon serveur Hostinger et tout semble ok. Mais je ne capte pas un truc : comment cette url wp-cron.php?doing_wp_cron=1 « sait » quel script est à exécuter ? Je voudrais créer un simple script d’envoi de mail pour tester mais où le placer sur le serveur et comment faire qu’il soit déclenché par le cronjob ? Ben si vous passez encore par là…merci. Cordialement. Renaud
Bonjour Renaud,
Cette URL déclenche le script wp-cron.php dont la fonction est de lancer les tâches cron qui sont en attentes.
Par ailleurs, il existe des extensions (comme WP Crontrol) qui permettent d’ajouter des tâches cron.
Cordialement,
Merci Cyrille pour l’article à jour 😉
La remarque à propos de iThemes et la liste HackRepair.com Blacklist n’est à mon avis plus valable. Je viens de tester sur un iThemes (Premium) et j’ai vérifié les règles qui ne contiennent pas le wget.
A priori depuis 2014, c’est corrigé (confirmé dans un commentaire) : https://hackrepair.com/articles/website-security/how-to-block-bots-from-seeing-your-website-bad-bots-and-drive-by-hacks-explained
Merci Renaud,
Je corrige l’article.
Bonne journée,
Hello @Cyrille,
Me croirais-tu si je te disais que je suis en ce moment même en cours de dépannage sur un souci de CRON et voilà que je tombe sur ton article depuis Slack. Elle est pas belle ma vie ?
Plus sérieusement , merci pour cette véritable doc et sa riche bibliographie.
À bientôt !
Salut Jean-Michel,
Ravi de t’avoir aidé. Le sujet est assez complexe et bien que j’ai planché dessus à mes débuts, je fais encore des découvertes. C’est la raison pour laquelle j’ai actualisé l’article.
Si tu as des informations à ajouter n’hésite pas.
Bonne journée,
Bonjour,
j’ai ajouté curl -I https://monsite/wp-cron.php?doing_wp_cron >/dev/null 2>&1 chez o2switch mais wp-rocket m’indique que cron ne fonctionne pas.
avez-vous une idée ?
Bonjour Fab,
Chez o2switch la commande suivante fonctionne très bien.
Bonne journée,
Bonsoir,
pour ma part j’ai installé l’extension Ithemes security a cause de piratage trop fréquents sur des mutu ovh. Mais du coup cette extension me rapporte souvent des fichier altérés qui se trouvent venir d’une tache cron, visant le dossier laganges du wp-content. Est ce que quelqu’un peut me dire si c’est normal cette tache ? et surtout à quoi elle sert ?
Merci pour cet article intéressant.
Sand
Bonjour Sand,
Pas assez d’informations pour vous répondre. De quelle tâches s’agit-il ? J’ai cessé d’utiliser iThemes Security pour plusieurs raisons, l’une est qu’il envoyait trop d’informations inexploitables, comme le changement de fichier après une mise à jour, l’autre est qu’il est fortement soupçonné de vider le .htacesse et le wp-config.php ce qui rend les sites inaccessibles.
Cordialement,
Ah bon ? Inaccessibles dans quel sens ? Pour le référencement? Mais du coup qu’est ce vous utilisez à la place ? Car j’ai été piraté trop souvent pour laisser les sites sans défense ! Je veux bien un tuyau du coup. Pour la tache cron et bien je ne sais pas trop ce que c’est. Je vois qu’ithemes Security releve sans cesse des modifications de fichiers dans le dossier langages de wp en disant que c’est une tache cron. Mais justement je ne trouve aucune info sur une tache cron de wp qui agirait sur le dossier langages comme… Lire la suite »
Inaccessible dans le sens où le site était hors service (pages blanches).
Il y a d’autres extensions de sécurité comme SecuPress par exemple.
Bonne journée,