# Remplacer wp-cron par un cron système pour un site agricole peu connecté

> Une coopérative agricole dont la connexion internet coupe régulièrement ne peut pas compter sur les visites pour déclencher ses tâches planifiées. Voici la recette.

- Auteur : WordPress Développement
- Publié le : 2023-01-12
- Mis à jour le : 2023-01-12
- Catégorie : Outils &amp; workflow
- URL : https://www.wpmoderne.fr/outils/remplacer-wp-cron-cron-systeme-site-agricole/

## L’essentiel

- Le pseudo-cron dépend entièrement du trafic entrant
- Une connexion instable rend ce mécanisme imprévisible
- Un cron local exécuté sur le serveur ignore les coupures du visiteur

Une coopérative de producteurs, dont le site vitrine publie chaque semaine les tarifs de vente directe et les créneaux de retrait des paniers, tourne sur un serveur mutualisé classique. Le problème ne vient pas du serveur, mais des visiteurs : la zone desservie a un accès internet mobile fluctuant, et une bonne partie des consultations du site se fait hors connexion, en cache local du navigateur, ou depuis des zones où la 4G n'atteint pas toujours le serveur. Résultat, le pseudo-cron de WordPress, qui ne se déclenche qu'à la faveur d'une requête HTTP entrante, se réveille de façon erratique. Les tarifs programmés pour le lundi matin sont parfois publiés le mardi soir, faute de visite au bon moment.

Cette recette explique comment remplacer ce mécanisme par un cron système fiable, indépendant du trafic. Elle ne traite pas de la synchronisation hors ligne du contenu pour les visiteurs eux-mêmes, qui relève d'un sujet distinct.

## Le problème posé par le pseudo-cron dans ce contexte

Par défaut, WordPress vérifie à la fin de chaque chargement de page si une tâche planifiée est due, et l'exécute alors via une requête interne vers `wp-cron.php`. Ce mécanisme fonctionne bien tant que le trafic est régulier. Sur un site consulté de façon irrégulière, avec des pics le week-end et des creux en semaine, les tâches programmées pour une heure précise peuvent attendre plusieurs heures, parfois un jour entier, avant qu'une visite ne les déclenche.

## Désactiver le déclenchement automatique

La première étape consiste à couper ce déclenchement lié au trafic, dans `wp-config.php` :

```
define('DISABLE_WP_CRON', true);
```

> L'essentiel à retenir : Le pseudo-cron dépend entièrement du trafic entrant ; Une connexion instable rend ce mécanisme imprévisible ; Un cron local exécuté sur le serveur ignore les coupures du visiteur

Cette ligne ne supprime aucune tâche planifiée : elle empêche seulement WordPress de tenter de les exécuter à chaque visite. Les tâches restent enregistrées, en attente d'un déclencheur externe.

## Mettre en place le cron système

Sur ce type d'hébergement mutualisé, l'accès à la crontab système passe généralement par le panneau de gestion fourni par l'hébergeur, ou par une commande `crontab -e` si un accès SSH est disponible. La ligne suivante appelle WP-CLI directement, en évitant une requête HTTP superflue :

```
*/5 * * * * cd /home/cooperative/public_html && wp cron event run --due-now --quiet >> /home/cooperative/logs/cron.log 2>&1
```

L'intervalle de cinq minutes a été retenu après discussion avec la coopérative : suffisamment fréquent pour que la publication des tarifs paraisse instantanée à leurs yeux, suffisamment espacé pour ne pas surcharger un hébergement mutualisé partagé avec d'autres sites.

### Pourquoi passer par WP-CLI plutôt que par une requête HTTP

Appeler `wp-cron.php` via `curl` reste possible et fonctionne, mais cela consomme un cycle HTTP complet, avec chargement du thème actif, des extensions front-end, et parfois des redirections. La commande `wp cron event run --due-now` exécute directement les tâches dues en ligne de commande, sans passer par le rendu d'une page, ce qui réduit le temps d'exécution et la charge sur un hébergement aux ressources limitées.

## Vérifier que les tâches s'exécutent bien

Une fois le cron système en place, il reste essentiel de vérifier son bon fonctionnement sur la durée, en particulier sur un hébergement dont on ne maîtrise pas entièrement l'environnement :

1. Consulter le fichier de journal généré par la tâche cron, pour confirmer qu'elle s'exécute bien toutes les cinq minutes.
2. Lister les tâches en attente avec `wp cron event list`, et vérifier que leur date de prochaine exécution reste cohérente.
3. Publier un article de test avec une date programmée dans les dix minutes suivantes, et confirmer sa mise en ligne effective sans recharger manuellement le site.
4. Surveiller, la première semaine, que le pseudo-cron n'a pas été réactivé par une mise à jour du cœur qui écraserait `wp-config.php` sans précaution.

## Variante en cas d'hébergement sans accès à la crontab

Certains hébergements mutualisés très restreints ne proposent aucun accès à une crontab système ni à WP-CLI. Dans ce cas, un service de déclenchement externe programmé, qui appelle une URL à intervalle régulier, peut jouer le même rôle : il suffit de pointer ce service vers l'URL de `wp-cron.php` avec le paramètre `doing_wp_cron`. La fiabilité dépend alors de ce service tiers plutôt que du serveur lui-même, ce qui reste préférable à une dépendance totale au trafic entrant.

> Le conseil que nous donnons systématiquement dans ce genre de contexte à connectivité incertaine : ne jamais faire reposer une tâche planifiée sur le comportement du visiteur, toujours sur une horloge que l'on maîtrise soi-même.

## En résumé

Sur un site dont le trafic dépend d'une connexion instable, le pseudo-cron intégré de WordPress devient un handicap plutôt qu'une commodité. Le désactiver au profit d'un cron système régulier, couplé à WP-CLI pour l'exécution, redonne à la coopérative une publication de contenu fiable et prévisible, totalement indépendante des aléas de réception mobile de ses visiteurs.
