Documentation · Documentation technique
Événements Cron et planificateur
Ce document décrit les événements WP-Cron que le plugin ADP Car Market Hub planifie, les intervalles personnalisés qu'il enregistre et la stratégie de verrouillage qui empêche les exécutions simultanées.
Quand utiliser ce document
Lisez ce document si vous devez :
- Configurer les importations automatiques dans l'onglet d'administration Automation.
- Configurer un cron système externe pour déclencher les importations de manière fiable.
- Diagnostiquer les exécutions d'importation manquées, superposées ou bloquées.
- Planifier des déploiements en production où WP-Cron est désactivé au profit d'une véritable tâche cron.
Pour la logique d'importation par annonce, voir Import Engine. Pour le fonctionnement de la file d'attente des images, voir Image Importer And Queue.
Aperçu
Le plugin utilise deux voies de déclenchement complémentaires :
- WP-Cron — Le pseudo-cron intégré de WordPress, déclenché par les visites des pages du frontend. Le plugin y enregistre des hooks cron et des intervalles personnalisés.
- Point de terminaison REST cron —
GET /wp-json/as24ci/v1/cron-import, authentifié par un jeton, permet à un véritable cron système de déclencher les importations même sur les sites à faible trafic.
Les deux voies appellent le même exécuteur partagé,
AS24CI\Scheduler::run_import(), qui acquiert un verrou temporaire (transient),
délègue à l'importateur, effectue éventuellement des suppressions de synchronisation complète,
planifie le worker de la file d'attente d'images et enregistre l'exécution.
Hooks cron enregistrés par le plugin
AS24CI\Scheduler est construit lors du bootstrap de AS24CI\Plugin et
enregistre les hooks WordPress suivants :
| Hook | Lié à | Objectif |
|---|---|---|
cron_schedules | Scheduler::add_cron_intervals() | Enregistrer les intervalles as24ci_every_6_hours et as24ci_custom. |
as24ci_scheduled_import | Scheduler::run_scheduled_import() | Événement d'importation principal. Appelle run_import('wp-cron'). |
as24ci_image_queue_process | Scheduler::run_image_queue() | Worker de la file d'attente d'images (voir Image Importer And Queue). |
Ai_Assistant::AI_QUEUE_HOOK | Ai_Assistant::process_ai_queue (statique) | Worker de génération IA en arrière-plan. Lié inconditionnellement pour que le callback existe toujours ; la planification est conditionnée par les options de l'IA. |
De plus, le fichier principal du plugin
(adp-car-market-hub.php) enregistre un filtre cron_schedules distinct
qui ajoute l'intervalle as24ci_every_5_minutes (300 secondes)
de manière inconditionnelle — utile pour la file d'attente de l'IA et toutes les intégrations
personnalisées nécessitant une cadence inférieure à l'heure.
D'autres sous-systèmes du plugin planifient leurs propres événements de manière indépendante :
as24ci_daily_cleanup— nettoyage quotidien de la rétention des analyses, géré parAS24CI\Analytics. Planifié lors de l'activation et supprimé lors de la désactivation.- Cron du moteur de tarification — quotidien, géré par
AS24CI\Pricing_Engine(balise de hookas24ci_pricing_analysis_cron). Planifié lorsque la fonctionnalité est activée et effacé lors de la désactivation. - Scanner de qualité des données — s'exécute selon son propre calendrier (balise de hook
as24ci_automated_taxonomy_scan, géré parAS24CI\Data_Quality_Scanner) contrôlé paras24ci_dq_scan_frequencyetas24ci_dq_scan_time. - Worker de la file d'attente de l'IA — balise de hook
as24ci_process_ai_queue, géré parAS24CI\Ai_Assistant. Lié inconditionnellement ; planifié sur l'intervalleas24ci_every_5_minutesuniquement lorsque l'AI Assistant est activé, et effacé lors de la désactivation. - Revalidation de licence — balise de hook
as24ci_license_refresh, géré parAS24CI\License_Manager. Planifiédailylors de l'activation (et via une auto-correctionadmin_init) et effacé lors de la désactivation. Il s'agit de la mise à jour quotidienne faisant autorité de l'état de la licence / des droits de fonctionnalités de ADP Car Market Hub.
Intervalles personnalisés
| Clé d'intervalle | Durée | Enregistré dans |
|---|---|---|
as24ci_every_5_minutes | 300 s | adp-car-market-hub.php (toujours disponible). |
as24ci_every_6_hours | 6 h | Scheduler::add_cron_intervals(). |
as24ci_custom | N minutes | Scheduler::add_cron_intervals(). N provient de as24ci_cron_custom_minutes et est limité à un minimum de 15. |
Les intervalles standards de WordPress (hourly, twicedaily, daily) sont
également acceptés par le calendrier d'importation.
Planification de l'événement d'importation principal
L'événement d'importation principal est as24ci_scheduled_import, planifié par
AS24CI\Scheduler::reschedule(). La méthode :
- Appelle
unschedule()pour effacer toutes les occurrences existantes du hook. - Retourne immédiatement si
as24ci_auto_import_enabledest0(aucun événement n'est planifié). - Lit
as24ci_cron_schedule(par défauthourly). Valeurs autorisées :hourly,as24ci_every_6_hours,twicedaily,daily,as24ci_custom. - Calcule l'horodatage de la prochaine exécution via
calculate_next_run(): - Pourdailyettwicedaily, utilise l'heure de début configuréeas24ci_cron_start_time(HH:MM, 24 h) interprétée dans le fuseau horaire du site WordPress. Si l'heure de début d'aujourd'hui est déjà dépassée, la prochaine exécution est reportée à demain. - Pour tous les autres calendriers, la prochaine exécution est immédiate. - Appelle
wp_schedule_event( $next_run, $schedule, 'as24ci_scheduled_import' ).
Le planificateur ne planifie jamais plus d'une occurrence du hook ;
unschedule() efface chaque entrée en attente avant que reschedule()
n'en ajoute une nouvelle.
L'exécuteur partagé
AS24CI\Scheduler::run_import( string $source = 'manual' ) est le
point d'entrée unique utilisé par :
- Le hook cron
as24ci_scheduled_import(source :wp-cron). - Le point de terminaison REST cron (source :
rest). - Le bouton d'administration « Exécuter maintenant » (source :
manual).
L'exécuteur :
- Acquiert le verrou temporaire
as24ci_cron_import_running(Scheduler::LOCK_TRANSIENT) avec une durée de vie (TTL) deScheduler::LOCK_TTL. Un verrou obsolète (plus ancien que la durée de vie) est automatiquement effacé. - Pour les sources cron et REST, augmente la limite de temps d'exécution PHP
à 300 secondes via
set_time_limit(300). - Lit
as24ci_cron_max_vehicles(par défaut50) etas24ci_cron_image_queue(par défaut1). - Appelle
Importer::set_cron_image_queue( true|false )en conséquence. - Boucle sur les Seller ID configurés et appelle
Importer::import_all_for_seller()pour chacun, en cumulant les totaux et l'ensemble complet delisting_idsvus lors de cette exécution. S'arrête dès que la limite de véhicules est atteinte. - Si la synchronisation complète est activée (
as24ci_full_sync = 1) et que l'exécution n'a pas été interrompue par la limite, appelleImporter::full_sync_after_import( $remote_ids ). L'appel de synchronisation complète n'effectue aucune action si l'ensemble d'identifiants distants est vide (mesure de sécurité). - Planifie le worker de la file d'attente d'images
(
maybe_schedule_image_queue_worker). - Libère le verrou et réinitialise le mode cron-image-queue dans le
bloc
finallyafin que les appels manuels ultérieurs ne soient pas affectés. - Enregistre
as24ci_last_run_timeetas24ci_last_run_status(tableau de comptage{ inserted, updated, skipped, errors, sync_deleted, sync_kept, api_active }). - Invalide le transient « API status » du tableau de bord
(
Admin_Page::TRANSIENT_API_STATUS) afin que les cartes du tableau de bord se rafraîchissent lors du prochain chargement de page.
L'exécuteur retourne array{ success: bool, message: string, counts:
array<string,int> }.
Point de terminaison REST cron
AS24CI\Cron_Endpoint::register_routes() enregistre une seule
route GET :
GET /wp-json/as24ci/v1/cron-import
L'authentification est effectuée à l'intérieur du gestionnaire. Le jeton est lu
depuis as24ci_cron_token. Le point de terminaison :
- Refuse les requêtes lorsqu'aucun jeton n'est configuré (
403, avec un message demandant à l'administrateur d'en générer un dans l'interface d'administration). - Accepte le jeton soit via l'en-tête
Authorization: Bearer <token>(préféré — maintient le jeton hors des journaux d'accès du serveur), soit via le paramètre de requête?token=<token>. - Appelle
Scheduler::run_import( 'rest' )en cas de succès.
Le plugin suit également les pings « le cron externe est actif » indépendamment du point de terminaison REST :
- La visite de n'importe quelle URL avec
?as24ci_cron=1met à jouras24ci_last_external_cron_runavec l'horodatage Unix actuel viaCron_Endpoint::record_external_ping()(lié àinit).
Verrous et concurrence
Le plugin utilise deux transients à courte durée de vie pour empêcher les travaux simultanés :
| Transient | Propriétaire | TTL | Objectif |
|---|---|---|---|
as24ci_cron_import_running | Scheduler | Scheduler::LOCK_TTL (~40 min) | Verrou d'exécution unique pour run_import(). |
as24ci_image_queue_running | Scheduler | Scheduler::IMAGE_QUEUE_LOCK_TTL | Verrou d'exécution unique pour le worker de la file d'attente. |
Un verrou obsolète (plus ancien que la durée de vie) est automatiquement effacé par le prochain exécuteur, de sorte qu'un processus qui s'est arrêté en cours d'exécution ne bloque pas indéfiniment les futures importations. Une récupération manuelle (suppression du transient via WP-CLI ou un outil de base de données) n'est nécessaire que si vous souhaitez forcer une nouvelle exécution plus tôt que ne le permet la durée de vie.
Référence de configuration
| Option | Effet | Par défaut |
|---|---|---|
as24ci_auto_import_enabled | Activation générale de l'importation pilotée par cron. | 0 |
as24ci_cron_schedule | L'un des éléments suivants : hourly, as24ci_every_6_hours, twicedaily, daily, as24ci_custom. | hourly |
as24ci_cron_start_time | HH:MM (24 h, fuseau horaire du site). Utilisé par daily / twicedaily. | 06:00 |
as24ci_cron_custom_minutes | Minutes pour le calendrier as24ci_custom. Limité à >= 15. | 30 |
as24ci_cron_mode | wp-cron ou server-cron. Oriente les indications de l'interface d'administration. | wp-cron |
as24ci_cron_token | Jeton pour le point de terminaison REST cron. | (aucun) |
as24ci_cron_max_vehicles | Limite de véhicules par exécution cron / REST. 0 = illimité. | 50 |
as24ci_cron_image_queue | Utiliser la file d'attente d'images pendant les exécutions cron / REST. | 1 |
as24ci_full_sync | Supprimer les véhicules locaux absents de l'API après chaque importation. | 0 |
as24ci_last_run_time | Horodatage Unix de la dernière exécution terminée. | 0 |
as24ci_last_run_status | Tableau des totaux de la dernière exécution. | (vide) |
as24ci_last_external_cron_run | Horodatage Unix du dernier ping ?as24ci_cron=1. | 0 |
Les constantes de Scheduler::LOCK_TTL et du worker de la file d'attente d'images sont
définies dans le code ; vérifiez les valeurs actuelles dans le code source si vous avez besoin
de chiffres exacts.
Instructions étape par étape
Activation des importations automatisées via WP-Cron
- Ouvrez l'onglet d'administration Automation.
- Réglez le Cron mode sur
wp-cron. - Réglez Auto import sur activé
(
as24ci_auto_import_enabled = 1). - Choisissez un calendrier. Pour
daily/twicedaily, définissez l'heure de début. Pouras24ci_custom, définissez l'intervalle (minimum 15 minutes). - Enregistrez. L'onglet Import & Limits appelle
Scheduler::reschedule()pour enregistrer la prochaine exécution. - (Facultatif) Diminuez la valeur de Vehicles per cron run pour les très grands catalogues afin que les exécutions individuelles restent dans la limite de temps PHP de l'hébergeur.
Déclenchement des importations via un cron système
- Basculez le Cron mode sur
server-cronafin que l'interface d'administration affiche les indications pour le cron du serveur. - (Recommandé) Désactivez WP-Cron dans
wp-config.php:
- Définissez
define( 'DISABLE_WP_CRON', true );. WordPress n'exécutera alors les événements planifiés que lorsque quelque chose les déclenchera explicitement.
- Générez un jeton dans l'écran Import & Limits. Le plugin
le stocke dans
as24ci_cron_token. - Configurez votre cron système pour appeler le point de terminaison REST, par exemple toutes les heures :
0 * * * * curl -fsS -H "Authorization: Bearer YOUR_TOKEN" \
"https://example.com/wp-json/as24ci/v1/cron-import?as24ci_cron=1"
Le paramètre de requête facultatif ?as24ci_cron=1 met également à jour l'horodatage
« le cron externe est actif » affiché dans l'état d'administration.
- Vérifiez la réponse. Une exécution réussie renvoie une charge utile JSON contenant
les totaux ; un code
403indique un jeton manquant ou incorrect.
Notes opérationnelles
- WP-Cron est déclenché par le trafic du site. Sur les sites à faible trafic, les événements planifiés peuvent s'exécuter en retard ou pas du tout. Utilisez un véritable cron système en production.
- L'appel
set_time_limit(300)peut être ignoré par les hébergeurs qui imposent des limites de temps PHP. Le plugin enregistre un avertissement dans ce cas. - L'option
as24ci_full_syncest activable sur option par mesure de sécurité. Lorsqu'elle est activée, les véhicules dont les annonces disparaissent de l'API sont définitivement supprimés (y compris leurs pièces jointes importées). Assurez-vous que les Seller IDs configurés couvrent l'intégralité du catalogue que vous avez l'intention de conserver en ligne. - La désactivation du plugin efface tous ses événements planifiés (
as24ci_scheduled_import, le nettoyage de l'analyse, la planification de la file d'attente de l'AI Assistant, la planification du moteur de tarification et l'événementas24ci_license_refresh— ainsi que le hook héritéas24ci_competitor_watcher_cron) et supprime le transientas24ci_cron_import_running. - Le plugin ne code jamais en dur d'URL ou de jetons cron externes. L'exemple ci-dessus utilise un espace réservé ; remplacez-le par votre propre hôte et un jeton généré avant le déploiement.
Dépannage
- Les importations ne s'exécutent pas automatiquement. Vérifiez
as24ci_auto_import_enabled = 1, qu'une planification est sélectionnée et quewp_next_scheduled( 'as24ci_scheduled_import' )renvoie un horodatage futur. Si la valeur estfalse, enregistrez à nouveau l'onglet Automatisation pour appelerreschedule(). Import already in progressest enregistré dans les journaux. Le verrou d'exécution unique est détenu par un autre exécuteur. Attendez que le TTL du verrou expire (le prochain exécuteur effacera automatiquement un verrou obsolète) ou supprimez le transientas24ci_cron_import_runningvia WP-CLI pour une tentative immédiate.No seller IDs configuredest renvoyé. Définissezas24ci_seller_idsdans les réglages de l'API.- Les planifications quotidiennes se déclenchent au mauvais moment. Le plugin utilise le fuseau horaire du site WordPress (
wp_timezone()). Vérifiez le fuseau horaire dans Réglages → Général, et non l'heure locale du serveur. - L'endpoint REST renvoie
403. Soit le jeton est manquant (as24ci_cron_tokenvide — le message de réponse le confirme), soit le jeton de la requête ne correspond pas. Générez un nouveau jeton dans l'interface d'administration. - Le cron externe semble inactif dans l'état de l'administration. Vérifiez que l'URL que vous appelez inclut
?as24ci_cron=1(ou que l'endpoint cron REST réussit), et que la requête atteint le site WordPress (pas de pare-feu, pas de barrière d'authentification). Le plugin met à jouras24ci_last_external_cron_runà chaque ping réussi. - La file d'attente d'images ne se vide pas après une importation cron. Il s'agit d'un worker distinct. Consultez la section de dépannage dans Importateur d'images et file d'attente.