Documentatie · Technische documentatie
Cron-events en scheduler
Dit document beschrijft de WP-Cron-events die de ADP Car Market Hub-plugin inplant, de aangepaste intervallen die deze registreert en de vergrendelingsstrategie die overlappende runs voorkomt.
Wanneer u dit document moet gebruiken
Lees dit document als u het volgende moet doen:
- Automatische imports configureren in het tabblad Automatisering van de beheerder.
- Een externe systeem-cron instellen om imports betrouwbaar te triggeren.
- Gemiste, overlappende of vastgelopen import-runs diagnosticeren.
- Productie-implementaties plannen waarbij WP-Cron is uitgeschakeld ten gunste van een echte cronjob.
Zie Import Engine voor de importlogica per voertuig. Zie Image Importer And Queue voor de werking van de afbeeldingenwachtrij.
Overzicht
De plugin gebruikt twee complementaire triggerpaden:
- WP-Cron — De ingebouwde pseudo-cron van WordPress, geactiveerd door paginaweergaven aan de frontend. De plugin registreert hier cron-hooks en aangepaste intervallen.
- REST cron-endpoint —
GET /wp-json/as24ci/v1/cron-import, geauthenticeerd met een token, stelt een echte systeem-cron in staat om imports te triggeren, zelfs op websites met weinig verkeer.
Beide paden roepen dezelfde gedeelde runner aan,
AS24CI\Scheduler::run_import(), die een tijdelijke vergrendeling (transient lock) verkrijgt,
het werk delegeert aan de importer, optioneel full-sync verwijderingen uitvoert,
de image-queue worker inplant en de run registreert.
Cron-hooks geregistreerd door de plugin
AS24CI\Scheduler wordt opgebouwd tijdens de bootstrap van AS24CI\Plugin en
registreert de volgende WordPress-hooks:
| Hook | Gekoppeld aan | Doel |
|---|---|---|
cron_schedules | Scheduler::add_cron_intervals() | Registreer de as24ci_every_6_hours- en as24ci_custom-intervallen. |
as24ci_scheduled_import | Scheduler::run_scheduled_import() | Hoofd-import-event. Roept run_import('wp-cron') aan. |
as24ci_image_queue_process | Scheduler::run_image_queue() | Image-queue worker (zie Image Importer And Queue). |
Ai_Assistant::AI_QUEUE_HOOK | Ai_Assistant::process_ai_queue (statisch) | Achtergrond-worker voor AI-generatie. Onvoorwaardelijk gekoppeld zodat de callback altijd bestaat; inplannen wordt beheerd door AI-opties. |
Daarnaast registreert het hoofdbestand van de plugin
(adp-car-market-hub.php) een afzonderlijk cron_schedules-filter
dat het as24ci_every_5_minutes-interval (300 seconden)
onvoorwaardelijk toevoegt — handig voor de AI-wachtrij en eventuele aangepaste integraties
die een frequentie van minder dan een uur vereisen.
Andere subsystemen van de plugin plannen hun eigen events onafhankelijk in:
as24ci_daily_cleanup— dagelijkse opschoning van analytics-retentie, beheerd doorAS24CI\Analytics. Ingepland bij activering en verwijderd bij deactivering.- Pricing engine cron — dagelijks, beheerd door
AS24CI\Pricing_Engine(hook-tagas24ci_pricing_analysis_cron). Ingepland wanneer de functie is ingeschakeld en gewist bij deactivering. - Data Quality Scanner — draait op een eigen schema (hook-tag
as24ci_automated_taxonomy_scan, beheerd doorAS24CI\Data_Quality_Scanner) dat wordt beheerd dooras24ci_dq_scan_frequencyenas24ci_dq_scan_time. - AI queue worker — hook-tag
as24ci_process_ai_queue, beheerd doorAS24CI\Ai_Assistant. Onvoorwaardelijk gekoppeld; alleen ingepland op hetas24ci_every_5_minutes-interval wanneer de AI Assistant is ingeschakeld, en gewist bij deactivering. - Licentieherverificatie — hook-tag
as24ci_license_refresh, beheerd doorAS24CI\License_Manager. Ingeplanddailybij activering (en via eenadmin_initzelfherstel) en gewist bij deactivering. Dit is de gezaghebbende dagelijkse verversing van de ADP Car Market Hub licentie- / functierechtenstatus.
Aangepaste intervallen
| Interval-sleutel | Duur | Geregistreerd in |
|---|---|---|
as24ci_every_5_minutes | 300 s | adp-car-market-hub.php (altijd beschikbaar). |
as24ci_every_6_hours | 6 u | Scheduler::add_cron_intervals(). |
as24ci_custom | N minuten | Scheduler::add_cron_intervals(). N is afkomstig van as24ci_cron_custom_minutes en is begrensd op een minimum van 15. |
Standaard WordPress-intervallen (hourly, twicedaily, daily) worden
ook geaccepteerd door het importschema.
Het hoofd-import-event inplannen
Het hoofd-import-event is as24ci_scheduled_import, ingepland door
AS24CI\Scheduler::reschedule(). De methode:
- Roept
unschedule()aan om alle bestaande instanties van de hook te wissen. - Keert onmiddellijk terug als
as24ci_auto_import_enabledgelijk is aan0(er is geen event ingepland). - Leest
as24ci_cron_schedule(standaardhourly). Toegestane waarden:hourly,as24ci_every_6_hours,twicedaily,daily,as24ci_custom. - Berekent de tijdstempel voor de volgende run via
calculate_next_run(): - Voordailyentwicedailywordt de geconfigureerdeas24ci_cron_start_time(HH:MM, 24 u) gebruikt, geïnterpreteerd in de WordPress-tijdzone van de site. Als de starttijd van vandaag al is verstreken, wordt de volgende run naar morgen verschoven. - Voor alle andere schema's is de volgende run direct. - Roept
wp_schedule_event( $next_run, $schedule, 'as24ci_scheduled_import' )aan.
De scheduler plant nooit meer dan één instantie van de hook in;
unschedule() wist elke openstaande vermelding voordat reschedule()
een nieuwe toevoegt.
De gedeelde runner
AS24CI\Scheduler::run_import( string $source = 'manual' ) is het
enige toegangspunt dat wordt gebruikt door:
- De
as24ci_scheduled_importcron-hook (bron:wp-cron). - Het REST cron-endpoint (bron:
rest). - De knop "Nu uitvoeren" in het beheergedeelte (bron:
manual).
De runner:
- Verkrijgt de tijdelijke vergrendeling
as24ci_cron_import_running(Scheduler::LOCK_TRANSIENT) met een TTL vanScheduler::LOCK_TTL. Een verlopen vergrendeling (ouder dan de TTL) wordt automatisch gewist. - Verhoogt voor cron- en REST-bronnen de PHP-uitvoeringstijdlimiet
naar 300 seconden via
set_time_limit(300). - Leest
as24ci_cron_max_vehicles(standaard50) enas24ci_cron_image_queue(standaard1). - Roept dienovereenkomstig
Importer::set_cron_image_queue( true|false )aan. - Doorloopt de geconfigureerde Seller IDs en roept
Importer::import_all_for_seller()aan voor elk, waarbij de aantallen en de volledige set vanlisting_idsdie deze run zijn gezien, worden verzameld. Stopt zodra de voertuiglimiet is bereikt. - Als full-sync is ingeschakeld (
as24ci_full_sync = 1) en de run niet is afgebroken door de limiet, roept dezeImporter::full_sync_after_import( $remote_ids )aan. De full-sync-aanroep is een no-op als de externe ID-set leeg is (veiligheidsmaatregel). - Plant de image-queue worker in
(
maybe_schedule_image_queue_worker). - Geeft de vergrendeling vrij en herstelt de cron-image-queue-modus in het
finally-blok, zodat handmatige opeenvolgende aanroepen niet worden beïnvloed. - Registreert
as24ci_last_run_timeenas24ci_last_run_status(aantallen-array{ inserted, updated, skipped, errors, sync_deleted, sync_kept, api_active }). - Verklaart de tijdelijke dashboardstatus "API-status"
(
Admin_Page::TRANSIENT_API_STATUS) ongeldig, zodat de dashboardkaarten worden vernieuwd bij de volgende paginalading.
De runner retourneert array{ success: bool, message: string, counts:
array<string,int> }.
REST cron-endpoint
AS24CI\Cron_Endpoint::register_routes() registreert een enkele GET-route:
GET /wp-json/as24ci/v1/cron-import
Authenticatie wordt uitgevoerd binnen de handler. De token wordt gelezen
uit as24ci_cron_token. Het endpoint:
- Weigert verzoeken wanneer er geen token is geconfigureerd (
403, met een bericht waarin de beheerder wordt gevraagd er een te genereren in de beheerinterface). - Accepteert de token via de
Authorization: Bearer <token>-header (voorkeur — houdt de token buiten de toegangslogboeken van de server) of de?token=<token>-queryparameter. - Roept
Scheduler::run_import( 'rest' )aan bij succes.
De plugin houdt ook pings bij om te controleren of de "externe cron actief is", onafhankelijk van het REST-endpoint:
- Het bezoeken van een URL met
?as24ci_cron=1werktas24ci_last_external_cron_runbij naar de huidige Unix-tijdstempel viaCron_Endpoint::record_external_ping()(gekoppeld aaninit).
Vergrendelingen en gelijktijdigheid
De plugin gebruikt twee kortstondige transients om overlappend werk te voorkomen:
| Transient | Eigenaar | TTL | Doel |
|---|---|---|---|
as24ci_cron_import_running | Scheduler | Scheduler::LOCK_TTL (~40 min) | Vergrendeling voor een enkele run van run_import(). |
as24ci_image_queue_running | Scheduler | Scheduler::IMAGE_QUEUE_LOCK_TTL | Vergrendeling voor een enkele run van de queue worker. |
Een verlopen vergrendeling (ouder dan de TTL) wordt automatisch gewist door de volgende runner, zodat een proces dat halverwege de run is vastgelopen, toekomstige imports niet voor onbepaalde tijd blokkeert. Handmatig herstel (het verwijderen van de transient via WP-CLI of een databasetool) is alleen nodig als u een nieuwe run sneller wilt forceren dan de TTL toestaat.
Configuratiereferentie
| Optie | Effect | Standaard |
|---|---|---|
as24ci_auto_import_enabled | Hoofdschakelaar voor de door cron gestuurde import. | 0 |
as24ci_cron_schedule | Een van hourly, as24ci_every_6_hours, twicedaily, daily, as24ci_custom. | hourly |
as24ci_cron_start_time | HH:MM (24 u, tijdzone van de site). Gebruikt door daily / twicedaily. | 06:00 |
as24ci_cron_custom_minutes | Minuten voor het as24ci_custom-schema. Begrensd op >= 15. | 30 |
as24ci_cron_mode | wp-cron of server-cron. Stuurt hints in de beheerinterface aan. | wp-cron |
as24ci_cron_token | Token voor het REST cron-endpoint. | (geen) |
as24ci_cron_max_vehicles | Voertuiglimiet per cron- / REST-run. 0 = onbeperkt. | 50 |
as24ci_cron_image_queue | Gebruik de afbeeldingenwachtrij tijdens cron- / REST-runs. | 1 |
as24ci_full_sync | Verwijder lokale voertuigen die na elke import ontbreken in de API. | 0 |
as24ci_last_run_time | Unix-tijdstempel van de laatst voltooide run. | 0 |
as24ci_last_run_status | Aantallen-array van de laatste run. | (leeg) |
as24ci_last_external_cron_run | Unix-tijdstempel van de laatste ?as24ci_cron=1-ping. | 0 |
De constanten voor Scheduler::LOCK_TTL en de image-queue worker zijn
gedefinieerd in de code; controleer de huidige waarden in de broncode als u
exacte cijfers nodig hebt.
Stapsgewijze instructies
Geautomatiseerde imports inschakelen via WP-Cron
- Open het tabblad Automatisering in het beheergedeelte.
- Stel Cron-modus in op
wp-cron. - Stel Automatische import in op ingeschakeld
(
as24ci_auto_import_enabled = 1). - Kies een schema. Stel voor
daily/twicedailyde starttijd in. Stel vooras24ci_customhet interval in (minimaal 15 minuten). - Sla de wijzigingen op. Het tabblad Import & Limieten roept
Scheduler::reschedule()aan om de volgende run te registreren. - (Optioneel) Verlaag Voertuigen per cron-run voor zeer grote catalogi, zodat individuele runs binnen de PHP-tijdlimiet van de host blijven.
Imports triggeren via een systeem-cron
- Schakel Cron-modus over naar
server-cronzodat de beheerinterface server-cron-hints toont. - (Aanbevolen) Schakel WP-Cron uit in
wp-config.php:
- Stel
define( 'DISABLE_WP_CRON', true );in. WordPress zal dan alleen geplande events uitvoeren wanneer iets ze expliciet triggert.
- Genereer een token in het scherm Import & Limieten. De plugin
slaat dit op in
as24ci_cron_token. - Configureer uw systeem-cron om het REST-endpoint aan te roepen, bijvoorbeeld elk uur:
0 * * * * curl -fsS -H "Authorization: Bearer YOUR_TOKEN" \
"https://example.com/wp-json/as24ci/v1/cron-import?as24ci_cron=1"
De optionele queryparameter ?as24ci_cron=1 werkt ook de
tijdstempel "externe cron is actief" bij die in de beheerstatus wordt getoond.
- Controleer de respons. Een succesvolle run retourneert een JSON-payload met
aantallen; een
403duidt op een ontbrekende of onjuiste token.
Operationele opmerkingen
- WP-Cron wordt geactiveerd door websiteverkeer. Op websites met weinig verkeer kunnen geplande taken te laat of helemaal niet worden uitgevoerd. Gebruik een echte systeem-cron in productieomgevingen.
- De aanroep
set_time_limit(300)kan worden genegeerd door hosts die PHP-tijdslimieten afdwingen. De plugin logt in dat geval een waarschuwing. - De optie
as24ci_full_syncis om veiligheidsredenen opt-in. Als deze is ingeschakeld, worden voertuigen waarvan de advertenties uit de API verdwijnen permanent verwijderd (inclusief hun geïmporteerde bijlagen). Zorg ervoor dat de geconfigureerde Seller IDs de volledige catalogus dekken die u online wilt houden. - Het deactiveren van de plugin wist al zijn geplande taken (
as24ci_scheduled_import, de opschoning van analytics, de AI-wachtrijplanning, de planning van de pricing-engine en deas24ci_license_refresh-taak — plus de legacyas24ci_competitor_watcher_cron-hook) en verwijdert deas24ci_cron_import_runningtransient. - De plugin codeert nooit externe cron-URL's of tokens hard. Het bovenstaande voorbeeld gebruikt een tijdelijke aanduiding; vervang deze door uw eigen host en een gegenereerd token voordat u deze implementeert.
Probleemoplossing
- Imports worden niet automatisch uitgevoerd. Controleer
as24ci_auto_import_enabled = 1, of er een schema is geselecteerd en ofwp_next_scheduled( 'as24ci_scheduled_import' )een toekomstige tijdstempel retourneert. Als de waardefalseis, sla dan het tabblad Automatisering opnieuw op omreschedule()aan te roepen. Import already in progresswordt gelogd. De single-run lock is in handen van een andere runner. Wacht tot de lock-TTL verloopt (de volgende runner zal een verouderde lock automatisch wissen) of verwijder deas24ci_cron_import_runningtransient via WP-CLI voor een onmiddellijke nieuwe poging.No seller IDs configuredwordt geretourneerd. Stelas24ci_seller_idsin bij de API-instellingen.- Dagelijkse schema's worden op het verkeerde tijdstip uitgevoerd. De plugin gebruikt de WordPress tijdzone van de site (
wp_timezone()). Controleer de tijdzone in Instellingen → Algemeen, niet de lokale tijd van de server. - REST-endpoint retourneert
403. Ofwel het token ontbreekt (as24ci_cron_tokenis leeg — het antwoordbericht bevestigt dit) of het token in het verzoek komt niet overeen. Genereer een nieuw token in de beheerinterface. - Externe cron lijkt inactief in de beheerdersstatus. Controleer of de URL die u aanroept
?as24ci_cron=1bevat (of dat het REST-cron-endpoint slaagt), en of het verzoek de WordPress site bereikt (geen firewall, geen authenticatiebarrière). De plugin werktas24ci_last_external_cron_runbij na elke succesvolle ping. - Afbeeldingenwachtrij loopt niet leeg na een cron-import. Dit is een afzonderlijke worker. Zie de sectie over probleemoplossing in Image Importer And Queue.