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-endpointGET /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:

HookGekoppeld aanDoel
cron_schedulesScheduler::add_cron_intervals()Registreer de as24ci_every_6_hours- en as24ci_custom-intervallen.
as24ci_scheduled_importScheduler::run_scheduled_import()Hoofd-import-event. Roept run_import('wp-cron') aan.
as24ci_image_queue_processScheduler::run_image_queue()Image-queue worker (zie Image Importer And Queue).
Ai_Assistant::AI_QUEUE_HOOKAi_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 door AS24CI\Analytics. Ingepland bij activering en verwijderd bij deactivering.
  • Pricing engine cron — dagelijks, beheerd door AS24CI\Pricing_Engine (hook-tag as24ci_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 door AS24CI\Data_Quality_Scanner) dat wordt beheerd door as24ci_dq_scan_frequency en as24ci_dq_scan_time.
  • AI queue worker — hook-tag as24ci_process_ai_queue, beheerd door AS24CI\Ai_Assistant. Onvoorwaardelijk gekoppeld; alleen ingepland op het as24ci_every_5_minutes-interval wanneer de AI Assistant is ingeschakeld, en gewist bij deactivering.
  • Licentieherverificatie — hook-tag as24ci_license_refresh, beheerd door AS24CI\License_Manager. Ingepland daily bij activering (en via een admin_init zelfherstel) en gewist bij deactivering. Dit is de gezaghebbende dagelijkse verversing van de ADP Car Market Hub licentie- / functierechtenstatus.

Aangepaste intervallen

Interval-sleutelDuurGeregistreerd in
as24ci_every_5_minutes300 sadp-car-market-hub.php (altijd beschikbaar).
as24ci_every_6_hours6 uScheduler::add_cron_intervals().
as24ci_customN minutenScheduler::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:

  1. Roept unschedule() aan om alle bestaande instanties van de hook te wissen.
  2. Keert onmiddellijk terug als as24ci_auto_import_enabled gelijk is aan 0 (er is geen event ingepland).
  3. Leest as24ci_cron_schedule (standaard hourly). Toegestane waarden: hourly, as24ci_every_6_hours, twicedaily, daily, as24ci_custom.
  4. Berekent de tijdstempel voor de volgende run via calculate_next_run(): - Voor daily en twicedaily wordt de geconfigureerde as24ci_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.
  5. 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_import cron-hook (bron: wp-cron).
  • Het REST cron-endpoint (bron: rest).
  • De knop "Nu uitvoeren" in het beheergedeelte (bron: manual).

De runner:

  1. Verkrijgt de tijdelijke vergrendeling as24ci_cron_import_running (Scheduler::LOCK_TRANSIENT) met een TTL van Scheduler::LOCK_TTL. Een verlopen vergrendeling (ouder dan de TTL) wordt automatisch gewist.
  2. Verhoogt voor cron- en REST-bronnen de PHP-uitvoeringstijdlimiet naar 300 seconden via set_time_limit(300).
  3. Leest as24ci_cron_max_vehicles (standaard 50) en as24ci_cron_image_queue (standaard 1).
  4. Roept dienovereenkomstig Importer::set_cron_image_queue( true|false ) aan.
  5. Doorloopt de geconfigureerde Seller IDs en roept Importer::import_all_for_seller() aan voor elk, waarbij de aantallen en de volledige set van listing_ids die deze run zijn gezien, worden verzameld. Stopt zodra de voertuiglimiet is bereikt.
  6. Als full-sync is ingeschakeld (as24ci_full_sync = 1) en de run niet is afgebroken door de limiet, roept deze Importer::full_sync_after_import( $remote_ids ) aan. De full-sync-aanroep is een no-op als de externe ID-set leeg is (veiligheidsmaatregel).
  7. Plant de image-queue worker in (maybe_schedule_image_queue_worker).
  8. Geeft de vergrendeling vrij en herstelt de cron-image-queue-modus in het finally-blok, zodat handmatige opeenvolgende aanroepen niet worden beïnvloed.
  9. Registreert as24ci_last_run_time en as24ci_last_run_status (aantallen-array { inserted, updated, skipped, errors, sync_deleted, sync_kept, api_active }).
  10. 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=1 werkt as24ci_last_external_cron_run bij naar de huidige Unix-tijdstempel via Cron_Endpoint::record_external_ping() (gekoppeld aan init).

Vergrendelingen en gelijktijdigheid

De plugin gebruikt twee kortstondige transients om overlappend werk te voorkomen:

TransientEigenaarTTLDoel
as24ci_cron_import_runningSchedulerScheduler::LOCK_TTL (~40 min)Vergrendeling voor een enkele run van run_import().
as24ci_image_queue_runningSchedulerScheduler::IMAGE_QUEUE_LOCK_TTLVergrendeling 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

OptieEffectStandaard
as24ci_auto_import_enabledHoofdschakelaar voor de door cron gestuurde import.0
as24ci_cron_scheduleEen van hourly, as24ci_every_6_hours, twicedaily, daily, as24ci_custom.hourly
as24ci_cron_start_timeHH:MM (24 u, tijdzone van de site). Gebruikt door daily / twicedaily.06:00
as24ci_cron_custom_minutesMinuten voor het as24ci_custom-schema. Begrensd op >= 15.30
as24ci_cron_modewp-cron of server-cron. Stuurt hints in de beheerinterface aan.wp-cron
as24ci_cron_tokenToken voor het REST cron-endpoint.(geen)
as24ci_cron_max_vehiclesVoertuiglimiet per cron- / REST-run. 0 = onbeperkt.50
as24ci_cron_image_queueGebruik de afbeeldingenwachtrij tijdens cron- / REST-runs.1
as24ci_full_syncVerwijder lokale voertuigen die na elke import ontbreken in de API.0
as24ci_last_run_timeUnix-tijdstempel van de laatst voltooide run.0
as24ci_last_run_statusAantallen-array van de laatste run.(leeg)
as24ci_last_external_cron_runUnix-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

  1. Open het tabblad Automatisering in het beheergedeelte.
  2. Stel Cron-modus in op wp-cron.
  3. Stel Automatische import in op ingeschakeld (as24ci_auto_import_enabled = 1).
  4. Kies een schema. Stel voor daily / twicedaily de starttijd in. Stel voor as24ci_custom het interval in (minimaal 15 minuten).
  5. Sla de wijzigingen op. Het tabblad Import & Limieten roept Scheduler::reschedule() aan om de volgende run te registreren.
  6. (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

  1. Schakel Cron-modus over naar server-cron zodat de beheerinterface server-cron-hints toont.
  2. (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.
  1. Genereer een token in het scherm Import & Limieten. De plugin slaat dit op in as24ci_cron_token.
  2. 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.

  1. Controleer de respons. Een succesvolle run retourneert een JSON-payload met aantallen; een 403 duidt 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_sync is 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 de as24ci_license_refresh-taak — plus de legacy as24ci_competitor_watcher_cron-hook) en verwijdert de as24ci_cron_import_running transient.
  • 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 of wp_next_scheduled( 'as24ci_scheduled_import' ) een toekomstige tijdstempel retourneert. Als de waarde false is, sla dan het tabblad Automatisering opnieuw op om reschedule() aan te roepen.
  • Import already in progress wordt 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 de as24ci_cron_import_running transient via WP-CLI voor een onmiddellijke nieuwe poging.
  • No seller IDs configured wordt geretourneerd. Stel as24ci_seller_ids in 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_token is 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=1 bevat (of dat het REST-cron-endpoint slaagt), en of het verzoek de WordPress site bereikt (geen firewall, geen authenticatiebarrière). De plugin werkt as24ci_last_external_cron_run bij 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.

Gerelateerde documenten