Hébergement web

Cron (et WP-Cron)

Définition

Cron est le planificateur de tâches des systèmes Unix et Linux : il lance des commandes à heures fixes selon une table appelée crontab. WP-Cron est le mécanisme interne de WordPress pour les tâches programmées (publications, mises à jour, sauvegardes, e-mails) ; il n’a pas d’horloge propre et ne s’exécute qu’au chargement d’une page.

Cron (et WP-Cron), Hébergement web

Le nom vient du grec chronos, le temps. Sur un serveur Linux, le démon cron lit des tables de tâches et lance chaque commande au moment prévu : sauvegarde chaque nuit, renouvellement d’un certificat Let’s Encrypt, nettoyage de fichiers temporaires. WordPress a besoin du même service, mais il ne peut pas compter sur un accès au cron du système, absent de certains hébergements. Il a donc son propre mécanisme, WP-Cron.

La syntaxe d’une crontab

Chaque ligne commence par cinq champs : minute (0 à 59), heure (0 à 23), jour du mois (1 à 31), mois (1 à 12) et jour de la semaine (0 à 7, où 0 et 7 désignent le dimanche), suivis de la commande. Un astérisque signifie « chaque », et */15 dans le champ des minutes lance la tâche aux minutes 0, 15, 30 et 45.

*/15 * * * * commande-toutes-les-15-minutes
0 3 * * * commande-chaque-nuit-a-3-heures

Comment fonctionne WP-Cron

Selon la documentation de WordPress, WP-Cron vérifie à chaque chargement de page la liste des tâches programmées et exécute celles qui sont dues. Les intervalles fournis par défaut sont hourly, twicedaily, daily et weekly ; les extensions en ajoutent d’autres. Ce fonctionnement a deux conséquences. Si personne ne visite le site, rien ne s’exécute : une tâche prévue à 14 h peut attendre 17 h, comme le note la documentation. Elle n’est pas perdue pour autant, elle part à la visite suivante. À l’inverse, sur un site très fréquenté, la vérification a lieu en permanence.

Comparatif entre WP-Cron et le cron du système. WP-Cron : déclenché au chargement d’une page, une tâche prévue à 14 h peut attendre la visite suivante, un site peu visité accumule du retard, un site très visité fait la vérification à chaque page, actif par défaut sans réglage. Cron du système : déclenché par l’horloge du serveur, à intervalle régulier, indépendant du trafic, activé en définissant DISABLE_WP_CRON dans wp-config.php puis en ajoutant une ligne de crontab qui lance wp cron event run --due-now ou appelle wp-cron.php.
WP-Cron dépend des visites ; le cron du système suit l’horloge.

Sont concernés la publication des articles programmés, les vérifications et mises à jour automatiques, les sauvegardes des extensions, l’envoi de lettres d’information ou les rapports de sécurité.

Passer au cron du système

La solution recommandée par la documentation consiste à désactiver le déclenchement par les visites dans wp-config.php :

define( 'DISABLE_WP_CRON', true );

puis à confier le lancement au cron du serveur, par une requête vers wp-cron.php ou, si l’hébergeur fournit WP-CLI, par une commande qui exécute toutes les tâches dues en évitant les exécutions qui se chevauchent :

*/5 * * * * cd /chemin/du/site && wp cron event run --due-now --quiet

Sur un hébergement mutualisé, le panneau propose en général une rubrique « Tâches cron » pour ajouter cette ligne sans terminal.

Vidéo : « How to Setup External Cron Jobs in WordPress » (WP Speed Matters, en anglais)

Pour WordPress

  • Gardez un intervalle raisonnable, de 5 à 15 minutes : une exécution chaque minute charge inutilement un petit serveur.
  • Vérifiez que la tâche système fonctionne avant d’oublier : une fois DISABLE_WP_CRON défini, plus rien ne s’exécute si la ligne de crontab est fausse. wp cron event list montre les prochaines échéances et révèle les tâches en retard.
  • Méfiez-vous des copies : sur une préproduction, les tâches planifiées peuvent envoyer des e-mails aux vrais clients ou synchroniser des données externes. Désactivez-les ou neutralisez les envois.
  • Les sauvegardes planifiées par une extension dépendent de WP-Cron : contrôlez qu’elles se produisent vraiment, pour respecter votre stratégie de sauvegarde.

Erreurs fréquentes

Une tâche inconnue dans la liste des événements planifiés mérite d’être examinée : certains codes malveillants se réinstallent par une tâche programmée après chaque nettoyage.

Sources

  1. Plugin Handbook : Cron (lien externe, nouvel onglet)
  2. Plugin Handbook : Hooking WP-Cron Into the System Task Scheduler (lien externe, nouvel onglet)
  3. WP-CLI Commands : wp cron event run (lien externe, nouvel onglet)
  4. Linux manual page : crontab(5) (lien externe, nouvel onglet)

Toutes les définitions

La sécurité WordPress, sans le bruit

Un e-mail quand ça compte : nouvelles attaques observées, mises à jour de l’extension et guides pratiques. Pas de spam, désinscription en un clic.

Commencez gratuitement, passez à Pro quand vous êtes prêt

La version gratuite masque déjà WordPress et déplace la page de connexion. Pro ajoute alias, double authentification et surveillance.