Documentation · Guide d'intégration

Configuration du Cron Serveur

Ce document explique pourquoi une véritable tâche cron serveur est la méthode recommandée pour piloter les importations de l'extension ADP Car Market Hub en production, comment elle s'articule avec le planificateur WP-Cron intégré, et quelles vérifications opérationnelles doivent être mises en place une fois qu'elle est active.

Quand utiliser ce document

Utilisez ce document si vous :

  • Préparez un déploiement en production et déterminez comment les importations planifiées doivent être déclenchées.
  • Migrez de WP-Cron vers une tâche cron côté serveur parce que les importations ne sont pas fiables sur un site à faible trafic.
  • Utilisez un hébergeur qui recommande ou exige DISABLE_WP_CRON pour des raisons de performances.
  • Analysez pourquoi les importations démarrent en retard, s'exécutent uniquement pendant les heures de pointe, ou ne démarrent pas du tout.

Le public cible est un administrateur WordPress ayant accès à l'outil cron du serveur (par exemple via cPanel, Plesk, le panneau de contrôle de l'hébergement, ou un accès shell à une crontab Linux).

Aperçu

WordPress est livré avec un planificateur intégré appelé WP-Cron. WP-Cron ne s'exécute pas en continu en arrière-plan — il est vérifié lorsque quelqu'un demande une page sur le site. Sur un site à fort trafic, cela convient généralement, mais cela présente quelques limites bien connues :

  • Sur un site à faible trafic, les tâches planifiées s'exécutent en retard ou pas du tout car aucun visiteur ne déclenche WP-Cron.
  • WP-Cron s'exécute au sein d'une requête HTTP normale, il partage donc la limite de mémoire PHP et le temps d'exécution de la requête.
  • Plusieurs visiteurs arrivant en même temps peuvent entrer en concurrence pour exécuter la même tâche planifiée, ce qui est inefficace même si l'extension empêche en interne les doubles exécutions.

Pour ces raisons, la configuration de production recommandée consiste à désactiver WP-Cron et à le déclencher à partir d'une véritable tâche cron serveur. L'extension fournit un point de terminaison REST dédié et sécurisé par jeton spécifiquement à cet effet, afin que la tâche cron déclenche directement une importation sans dépendre d'un visiteur.

L'extension propose deux modes cron que vous pouvez choisir dans Car Market Hub → Importations et limites (la carte Automatisation) :

  • Mode WP-Cron (par défaut). La planification WP-Cron de l'extension (toutes les heures, toutes les 6 heures, deux fois par jour, tous les jours, ou personnalisée avec un minimum de 15 minutes) pilote les importations. Convient pour le développement, l'évaluation et les petits sites avec un trafic régulier.
  • Mode Cron serveur. La planification WP-Cron est désactivée et l'importation est déclenchée par une tâche cron serveur qui appelle le point de terminaison REST de l'extension. Recommandé pour la production.

Dans les deux modes, le travail d'importation réel est effectué par le même exécuteur partagé au sein de l'extension — la seule différence réside dans ce qui le déclenche.

Pourquoi le cron serveur est recommandé en production

  • Planification fiable. Une tâche cron serveur s'exécute selon un calendrier fixe, que quelqu'un visite ou non le site Web à ce moment-là.
  • Pas de pénalité sur le temps de requête. Les importations ne ralentissent pas le chargement des pages pour un visiteur réel, car elles s'exécutent dans leur propre processus PHP.
  • Utilisation prévisible des ressources. Une tâche cron serveur s'exécute une fois par période planifiée, au lieu d'être lancée de manière opportuniste par chaque visiteur.
  • Suivi plus facile. Les exécutions de cron laissent une trace d'audit claire (dans les journaux du service cron et dans les journaux de l'extension) et peuvent être associées à des vérifications de disponibilité externes.
  • Compatible avec les hébergeurs qui limitent ou désactivent WP-Cron. Certains hébergeurs gérés limitent la fréquence d'exécution interne de wp-cron.php ; un déclencheur externe contourne cette restriction.

Le cron serveur s'associe également très bien avec la file d'attente d'images de l'extension : une deuxième tâche cron qui appelle wp-cron.php à court intervalle permet de maintenir la file d'attente normale des tâches de WordPress (y compris le traitement des images) à un rythme prévisible.

Prérequis

Avant de passer au cron serveur, confirmez que :

  • L'extension est installée, activée et la connexion API fonctionne. Voir Configuration des identifiants API et Test de connexion.
  • L'environnement d'hébergement offre un accès à l'outil cron du serveur (tâches cron cPanel, tâches planifiées Plesk, cron du panneau de contrôle de l'hébergement, ou crontab Linux via SSH).
  • Le site peut être contacté en HTTPS par la tâche cron. Pour la plupart des hébergeurs, la commande cron s'exécute sur le même serveur et peut utiliser curl pour appeler le site.
  • Vous êtes en mesure de modifier wp-config.php (cela est nécessaire pour définir DISABLE_WP_CRON).
  • Les exigences générales d'hébergement et de cron et traitement en arrière-plan sont respectées.

Instructions étape par étape

La carte Automatisation de l'extension affiche l'URL de déclenchement REST exacte et des exemples de commandes pour l'installation actuelle. Utilisez ces valeurs plutôt que de copier des URL de la documentation.

  1. Basculez l'extension en mode cron serveur. Ouvrez Car Market Hub → Importations et limites. Dans la carte du mode cron, sélectionnez Cron serveur et enregistrez. L'extension masquera les commandes de planification WP-Cron et affichera une carte Configuration du cron serveur avec l'URL de déclenchement REST, le jeton secret et des exemples de commandes.
  2. Désactivez le cron intégré de WordPress. Ajoutez la ligne suivante dans wp-config.php, n'importe où au-dessus du commentaire /* That's all, stop editing! */ :
   define( 'DISABLE_WP_CRON', true );

Sans cette ligne, WP-Cron et la tâche cron du serveur essaieront tous deux de planifier des importations, ce qui est inefficace même lorsque le verrou interne de l'extension empêche les doubles exécutions.

  1. Copiez l'URL de déclenchement REST. La carte Configuration du cron serveur affiche l'URL sous la forme https://<your-site>/wp-json/as24ci/v1/cron-import?token=<secret>. Utilisez le bouton Copier pour que l'URL soit copiée textuellement. Traitez le jeton comme un secret — quiconque le possède peut déclencher une importation.
  2. Ajoutez la tâche cron d'importation. Dans l'outil cron de votre serveur, créez une tâche qui appelle l'URL de déclenchement à la fréquence souhaitée. L'extension pré-remplit un exemple tel que :
   */15 * * * * curl -s "https://<your-site>/wp-json/as24ci/v1/cron-import?token=<secret>" > /dev/null

Ajustez l'expression de planification (*/15 * * * * signifie toutes les 15 minutes) pour répondre aux besoins du concessionnaire. Les importations ignorent les véhicules inchangés grâce à la détection des modifications, de sorte que les exécutions fréquentes sont généralement peu gourmandes en ressources.

  1. Ajoutez une deuxième tâche cron pour maintenir la file d'attente des tâches de WordPress active. Étant donné que DISABLE_WP_CRON désactive également la file d'attente utilisée par le gestionnaire d'images de l'extension et par d'autres fonctionnalités de WordPress, ajoutez une deuxième tâche cron qui exécute directement wp-cron.php à court intervalle. L'exemple de l'extension utilise le chemin absolu de l'installation de WordPress :
   */5 * * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1

Le chemin est affiché dans la carte Automatisation en fonction de l'installation actuelle de WordPress. Remplacez-le par la valeur qui y est affichée.

  1. Vérifiez avec une exécution manuelle. Depuis un poste de travail, appelez une fois l'URL de déclenchement REST avec curl (ou collez-la dans un navigateur). Une exécution réussie renvoie une réponse JSON décrivant le résultat de l'importation. Une erreur 403 avec "Invalid or missing token" signifie que l'URL a été mal copiée.
  2. Vérifiez lors de la prochaine exécution planifiée. Attendez le prochain déclenchement cron planifié, puis ouvrez Car Market Hub → Système et aide et confirmez que Dernière exécution du cron externe affiche un horodatage récent.

Pour un autre style d'authentification qui évite d'inclure le jeton dans l'URL (et donc dans les journaux d'accès et les listes de processus), le point de terminaison accepte également un en-tête Authorization: Bearer <token>. Par exemple :

*/15 * * * * curl -s -H "Authorization: Bearer <secret>" "https://<your-site>/wp-json/as24ci/v1/cron-import" > /dev/null

Les deux styles sont équivalents ; le style avec en-tête est préférable lorsque l'environnement cron prend en charge les en-têtes personnalisés.

Référence de configuration

Les réglages qui affectent le mode cron serveur se trouvent dans Car Market Hub → Importations et limites (carte Automatisation).

RéglageObjectif
Mode cronPermet de basculer entre WP-Cron et Cron serveur. En mode Cron serveur, la planification WP-Cron est désactivée et la carte Configuration du cron serveur s'affiche.
URL de déclenchement RESTL'URL complète que la tâche cron du serveur doit appeler. Comprend le jeton secret comme paramètre de requête. Générée à partir de l'URL actuelle du site et du jeton stocké.
Jeton secretUn jeton aléatoire de 32 caractères qui authentifie le déclencheur REST. Généré automatiquement lors de la première utilisation. Utilisez le bouton Régénérer le jeton pour en émettre un nouveau (la tâche cron existante devra alors être mise à jour avec la nouvelle URL).
Exemples de commandes cronExemples de commandes pré-remplies utilisant l'URL de déclenchement actuelle et le chemin absolu vers wp-cron.php. Utilisez les boutons Copier pour les copier textuellement.
Nombre max de véhicules par exécution cronLimite le nombre de véhicules qu'une seule exécution d'importation traitera. 0 signifie illimité. Utile comme limite de sécurité sur les hébergements partagés.
Mode file d'attente d'imagesLorsqu'il est activé, les importations planifiées téléchargent uniquement la première image de chaque véhicule immédiatement et placent les autres dans une file d'attente pour un traitement asynchrone. Recommandé en production.

Notes opérationnelles

  • Un seul planificateur à la fois. N'exécutez pas le mode WP-Cron et le mode cron serveur en parallèle. Passer à Cron serveur dans l'extension désactive la planification WP-Cron ; ajouter DISABLE_WP_CRON à wp-config.php complète le processus en empêchant WordPress d'exécuter sa file d'attente cron à partir des requêtes du front-end.
  • L'exécuteur partagé. Le point de terminaison REST, le hook WP-Cron et le bouton d'administration Déclencher maintenant délèguent tous au même exécuteur d'importation au sein de l'extension. Il n'y a pas de "chemin d'importation cron serveur" distinct avec un comportement différent.
  • Sécurité de concurrence. L'exécuteur utilise un verrou interne basé sur les transients pour empêcher deux importations de s'exécuter en même temps. Même si une tâche cron chevauche une autre, la seconde exécution est interrompue immédiatement.
  • Confidentialité du jeton. Le jeton cron donne le droit de déclencher une importation. Traitez-le comme un secret. Évitez de coller des URL de déclenchement complètes dans des captures d'écran ou des tickets ; masquez la partie token=... avant de partager.
  • Rotation du jeton. Utilisez Régénérer le jeton chaque fois que vous soupçonnez que le jeton a été exposé, ou dans le cadre d'une rotation périodique. Après la régénération, mettez à jour chaque tâche cron qui utilise l'URL — l'ancienne URL sera rejetée.
  • Emplacement du point de terminaison. Le point de terminaison REST est l'URL REST standard de WordPress …/wp-json/as24ci/v1/cron-import. Si l'URL du site WordPress change (migration HTTPS, changement de domaine, déplacement multi-site), mettez à jour la tâche cron en conséquence.
  • Signal d'activité externe (heartbeat). Toute requête adressée au site qui inclut ?as24ci_cron=1 enregistre un horodatage que l'onglet Système et aide utilise pour confirmer qu'un planificateur externe est actif. Ceci est purement informatif et ne déclenche pas d'importation en soi.
  • Tâche complémentaire de file d'attente d'images. Lorsque des images sont mises en file d'attente lors d'importations planifiées, la file d'attente est traitée par la file d'attente des tâches de WordPress. Si vous avez désactivé WP-Cron, la deuxième tâche cron qui appelle wp-cron.php est ce qui permet de maintenir cette file d'attente en mouvement.
  • Ne vous fiez pas aux tests basés sur le navigateur. Coller l'URL de déclenchement dans un navigateur fonctionne pour la vérification, mais ne doit pas être utilisé comme déclencheur réel — cela dépendrait du fait que quelqu'un garde un navigateur ouvert.

Vérifications opérationnelles après configuration

Passez en revue ces vérifications une fois après être passé au mode cron serveur, et de nouveau après tout changement majeur (migration d'hébergeur, changement d'URL, régénération de jeton) :

  1. Le service cron est activé. Confirmez que l'outil cron de l'hébergeur est actif et que le compte utilisateur exécutant la tâche a l'autorisation d'exécuter la commande.
  2. La commande planifiée est correcte. L'expression de planification correspond à la fréquence souhaitée, l'URL correspond à la valeur affichée sur la carte Automatisation, et la seconde tâche qui appelle wp-cron.php existe.
  3. DISABLE_WP_CRON est défini. L'onglet Système et aide confirme que la constante est définie lorsque vous êtes en mode cron serveur.
  4. La dernière exécution du cron externe est récente. L'onglet Système et aide affiche un horodatage de Dernière exécution du cron externe dans l'intervalle attendu.
  5. La dernière exécution d'importation est récente. Le widget du tableau de bord et l'onglet Système et aide affichent une activité récente de l'importateur.
  6. Les journaux ne montrent pas d'échecs d'authentification répétés. Un motif de réponses 403 dans les journaux signifie que la tâche cron utilise un jeton obsolète ou incorrect.
  7. La file d'attente d'images se vide. L'onglet Importations et limites montre que la file d'attente d'images est en cours de traitement (ou est vide).
  8. Moniteur externe facultatif. Configurez un moniteur de disponibilité ou une alerte au niveau de l'hébergement qui vous avertit si la tâche d'importation cesse de s'exécuter.

Vérifiez ces points par rapport à la version actuelle de l'extension avant de publier des instructions destinées aux clients, car les libellés de l'interface utilisateur peuvent évoluer entre les versions.


Dépannage

SymptômeCause probableCe qu'il faut vérifier
La tâche cron s'exécute mais la réponse est 403 avec "Invalid or missing token".Le jeton dans l'URL est incorrect, contient des espaces ou a été régénéré après la création de la tâche cron.Copiez à nouveau l'URL depuis la carte Automatisation et mettez à jour la commande cron.
La tâche cron s'exécute mais la réponse est 403 avec "Cron token not configured".Le jeton n'a pas encore été généré.Ouvrez la carte Automatisation pour générer automatiquement un jeton, puis copiez la nouvelle URL.
La tâche cron s'exécute avec succès, mais l'onglet Système et aide n'affiche toujours aucune exécution externe récente.Le service cron appelle un hôte différent (par exemple HTTP au lieu de HTTPS, ou www. par rapport au nom d'hôte canonique) et la requête est redirigée loin de WordPress.Utilisez l'URL exacte affichée sur la carte Automatisation. Confirmez que le service cron de l'hôte peut atteindre le site via HTTPS.
Les importations s'exécutent, mais les pièces jointes d'images cessent d'apparaître.DISABLE_WP_CRON est activé mais aucune tâche cron n'appelle wp-cron.php, de sorte que le worker de la file d'attente d'images ne s'exécute jamais.Ajoutez la deuxième tâche cron pour wp-cron.php comme décrit ci-dessus.
Les importations s'exécutent trop longtemps ou atteignent une limite de mémoire.Les limites PHP CLI de l'hôte sont plus strictes que prévu.Réduisez le paramètre Nombre max de véhicules par exécution cron, laissez le mode file d'attente d'images activé et consultez Cron et traitement en arrière-plan.
Les importations s'exécutent deux fois de suite à court intervalle.Le mode WP-Cron et une tâche cron du serveur sont tous deux actifs.Basculez l'extension sur le mode Cron du serveur et ajoutez DISABLE_WP_CRON à wp-config.php.
La tâche cron s'exécute mais renvoie toujours "Another import is already running".Une exécution précédente ne s'est pas terminée (lot à exécution longue, expiration du délai côté hôte). Le verrou temporaire n'a pas encore expiré.Attendez que le verrou expire, puis examinez l'exécution précédente via les journaux de l'extension. Voir Erreurs de cron.

Documents connexes