Documentatie · Systeemvereisten
Cron en achtergrondverwerking
Doel
ADP Car Market Hub is voor bijna alles wat geen directe gebruikersactie is afhankelijk van geplande achtergrondtaken: het importeert voertuigen van AutoScout24, verwerkt afbeeldingen asynchroon, schoont analytics-gegevens op, vernieuwt prijsanalyses en voert dagelijkse datakwaliteitsscans uit. Dit document legt de cron-mechanismen uit die de plugin gebruikt, de verschillen tussen de ingebouwde planner van WordPress en een echte server-cron, de terugkerende taken die de plugin plant, en de operationele signalen om te monitoren.
Wanneer dit document te gebruiken
Gebruik dit document wanneer u:
- Kiest tussen WP-Cron en een externe server-cron voor een nieuwe dealerwebsite.
- De cron-modus, frequentie en het geheime token configureert in het tabblad Import & Limits.
- Een externe planner (Linux-cron, hosting-cron-UI of een externe pinger) koppelt aan het REST-cron-endpoint van de plugin.
- Onderzoekt waarom imports niet volgens schema lopen, of waarom de verwerking van afbeeldingen vertraging oploopt.
- Controleert welke terugkerende taken de plugin registreert en hoe lang de gegevens daarvan worden bewaard.
Overzicht
Het achtergrondverwerkingsmodel van de plugin heeft drie lagen:
- Een triggerlaag die bepaalt wanneer het werk moet starten. Dit kan de pseudo-cron van WordPress zijn (aangestuurd door websitebezoeken aan
wp-cron.php) of een externe server-cron die ofwelwp-cron.phprechtstreeks aanroept, ofwel het met een token beveiligde REST-endpoint van de plugin op/wp-json/as24ci/v1/cron-import. - Een plannerlaag die eigenaar is van de terugkerende taken. De plugin registreert aangepaste intervallen (elke 5 minuten, elke 6 uur, plus een configureerbaar "elke N minuten"-interval met een ondergrens van 15 minuten) en een kleine set WP-Cron-hooks voor imports, de afbeeldingswachtrij, de AI-generatiewachtrij, het opschonen van analytics, prijsanalyse en de dagelijkse taxonomiescan.
- Een workerlaag die het eigenlijke werk doet. Elke WP-Cron-hook is gekoppeld aan een class-methode (importer, afbeeldingswachtrij, opschonen van analytics, enz.) die op transients gebaseerde locks gebruikt om overlappende runs te voorkomen en status-/heartbeat-opties wegschrijft die het tabblad System & Help / Health en de dashboard-widget weer uitlezen.
Alle drie de importpaden — de geplande WP-Cron-hook, het REST-cron-endpoint en de handmatige "Trigger nu"-knop in het beheerpaneel — roepen dezelfde gedeelde runner aan, waardoor het gedrag en de locking identiek zijn, ongeacht de trigger.
WordPress cron vs. server-cron
Het tabblad Import & Limits toont twee triggermodi; beide worden ondersteund, maar ze hebben zeer verschillende betrouwbaarheidsprofielen.
WordPress Cron (standaard)
- Aangestuurd door bezoekersverkeer. Elk verzoek aan een WordPress-pagina kan
wp-cron.phpop de achtergrond starten. - Werkt op elke host zonder servertoegang.
- Wordt onbetrouwbaar op websites met weinig verkeer: zonder bezoekers zijn er geen cron-runs.
- De plugin installeert nog steeds al zijn hooks; gemiste runs stapelen zich simpelweg op tot het volgende bezoek.
Server-cron (aanbevolen voor productie)
- Aangestuurd door het besturingssysteem of de planner van het hosting-controlepaneel.
- Onafhankelijk van websiteverkeer, voorspelbaar en vereist door de Health-checks van de plugin voor een "volledig gereed"-productiestatus.
- Aanbevolen configuratie:
1. Stel
define( 'DISABLE_WP_CRON', true );in inwp-config.phpzodat de door bezoeken aangestuurde cron is uitgeschakeld. 2. Voeg een server-cron-taak toe die het REST-endpoint van de plugin aanroept met het geheime token. 3. Voeg een tweede taak toe diewp-cron.phpzelf uitvoert, zodat niet-importgerelateerde terugkerende taken (afbeeldingswachtrij, opschonen van analytics, prijsbepaling, enz.) nog steeds worden uitgevoerd.
Als u overschakelt naar Server Cron in het tabblad Import & Limits, worden de WP-Cron-schemavelden verborgen en worden de REST-trigger-URL, het geheime token en kant-en-klare voorbeeldcommando's getoond.
Terugkerende taken geregistreerd door de plugin
De volgende WP-Cron-hooks worden door de plugin ingepland (sommige alleen wanneer de bijbehorende functie is geconfigureerd). Het tabblad System & Help toont hun volgende geplande uitvoeringstijd, zodat ze op elk moment kunnen worden gecontroleerd.
| Hook | Doel | Frequentie |
|---|---|---|
as24ci_scheduled_import | Hoofdrunner voor voertuigimport; roept de AutoScout24 API aan voor elke geconfigureerde dealer. | Configureerbaar in het tabblad Import & Limits (elk uur, tweemaal daags, dagelijks, elke 6 uur, elke 5 minuten, of een aangepast "elke N minuten"-interval met een minimum van 15 minuten). |
as24ci_image_queue_process | Asynchrone afbeeldingsworker; downloadt de resterende voertuigafbeeldingen nadat de eerste inline is geladen tijdens de import. | Elke 5 minuten wanneer de afbeeldingswachtrij is ingeschakeld. |
as24ci_daily_cleanup | Verwijdert analytics-gebeurtenissen die ouder zijn dan de geconfigureerde bewaarperiode (standaard 180 dagen, minimaal 7 dagen). | Dagelijks. |
as24ci_pricing_analysis_cron | Berekent de analyse van de prijsbepalingsmodule opnieuw voor de voorraad. | Dagelijks. |
as24ci_automated_taxonomy_scan | Datakwaliteit- / taxonomiescan op de achtergrond. | Frequentie geconfigureerd door de module Datakwaliteit. |
as24ci_competitor_watcher_cron | Alleen voor legacy-opschoning; de functie Competitor Watcher is verwijderd en is niet actief. De hooknaam is behouden zodat eventuele resterende geplande gebeurtenissen van oudere installaties worden gewist bij het deactiveren van de plugin. | Niet gepland. |
| AI-generatiewachtrij-hook | Asynchrone AI Assistant-generatieworker; alleen gepland wanneer de AI Assistant is ingeschakeld en geconfigureerd. | Aangestuurd door de instellingen van de AI Assistant. |
Bij activering worden de terugkerende taken geregistreerd die altijd moeten bestaan (imports, opschonen van analytics, prijsbepaling, afbeeldingswachtrij, AI-wachtrij indien van toepassing). Deactivering verwijdert de WP-Cron-items van de plugin via wp_clear_scheduled_hook() voor elke hierboven genoemde hook.
Terugkerende imports
De importrunner wordt gedeeld door alle drie de triggerpaden en gedraagt zich als volgt:
- Locking. Voordat de runner werk verricht, stelt deze een transient (
as24ci_cron_import_running) in met een TTL van ongeveer 40 minuten. Volgende runs die binnenkomen terwijl de lock actief is, stoppen direct en melden dat er al een import actief is. Dit voorkomt dat WP-Cron en een server-cron met elkaar in conflict raken. - Verwerking per dealer. De runner doorloopt elke geconfigureerde Seller ID en roept de importer voor elk daarvan achtereenvolgens aan.
- Voertuigen per run. Het tabblad Import & Limits toont een limiet voor "Voertuigen per Run" (0 = geen limiet). Het verlagen van deze waarde is de belangrijkste knop voor stabiliteit op shared hosting en bij zeer grote voorraden; aanbevolen waarden zijn 50–80 voor grote catalogi.
- Statusbehoud. Na elke run worden opties bijgewerkt met de tijdstempel van de laatste run, de triggerbron (
wp-cron,rest, handmatig) en de aantallen per dealer. De dashboard-widget en het tabblad System & Help lezen deze opties uit om informatie over de laatste run weer te geven. - Optionele volledige synchronisatie. Wanneer de optie Volledige synchronisatie is ingeschakeld, kan de runner voertuigen die ontbreken in de nieuwste API-respons als verwijderd markeren; dit is permanent, dus een geteste back-upstrategie is vereist (zie Hosting Requirements).
De Batch-Wizard in de beheeromgeving gebruikt dezelfde importer, maar verwerkt één voertuig per stap uit een wachtrijlijst (transient as24ci_batch_queue), wat handig is voor zeer grote initiële imports op beperkte hosts.
Afbeeldingswachtrij en asynchrone workers
Wanneer Enable Image Queue is ingeschakeld (aanbevolen voor imports met veel afbeeldingen):
- Tijdens de import wordt alleen de eerste afbeelding van elk voertuig synchroon gedownload, zodat de pagina snel laadt en de cron-run ruim binnen de PHP-uitvoeringstijdlimieten blijft.
- Resterende afbeeldings-URL's worden toegevoegd aan de afbeeldingswachtrij (een WordPress-optie) en elke 5 minuten in batches verwerkt door de
as24ci_image_queue_process-hook. - De worker gebruikt zijn eigen transient-lock (
as24ci_image_queue_running, 10 minuten TTL) en verwerkt een vast aantal afbeeldingen per batch. - Een veiligheidslimiet (de constante voor de limiet van de wachtrijgrootte in
Scheduler) begrenst hoe groot de wachtrij mag worden voordat de plugin een waarschuwing logt en dubbele vermeldingen geforceerd verwijdert.
De AI-generatiewachtrij volgt een soortgelijk patroon: AI-aanroepen tijdens de import worden uitgesteld naar een wachtrij en verwerkt door een asynchrone worker, zodat import-runs niet worden geblokkeerd door het beheerde Gemini-endpoint.
Opschonings- en bewaarroutines
- Bewaren van analytics.
Analytics::cleanup_old_data()(hookas24ci_daily_cleanup) verwijdert analytics-rijen die ouder zijn dan de waarde in de instelling Analytics retention days. De standaardwaarde is 180 dagen; het minimum dat in de code wordt afgedwongen is 7 dagen. - Logrotatie. Plugin-logs in
wp-content/uploads/as24ci-logs/worden geroteerd wanneer een enkel bestand 10 MB bereikt, en geroteerde bestanden worden na 7 dagen verwijderd. Dit staat los van WP-Cron en wordt uitgevoerd bij elke logschrijving. - Token-cache. OAuth-toegangstokens worden gecached in een transient tot kort voor hun geadverteerde
expires_in. Er is een tool "Token-cache wissen" beschikbaar voor diagnostische doeleinden. - Verwijderen van voertuigen. Wanneer de plugin een voertuig verwijdert (Volledige synchronisatie of handmatige verwijdering), schoont deze de gerelateerde mediabijlagen en meta op via een centraal verwijderingspad.
REST-cron-endpoint
Het met een token beveiligde trigger-endpoint wordt geregistreerd door Cron_Endpoint:
- Route:
GET /wp-json/as24ci/v1/cron-import - Authenticatie: een willekeurig geheim van 32 tekens dat is opgeslagen in de optie
as24ci_cron_token. Het endpoint accepteert het token op twee manieren: - Voorkeur:
Authorization: Bearer <token>HTTP-header (houdt het token buiten de toegangslogs). - Terugvaloptie:
?token=<token>queryparameter. - Responscodes:
200bij succes,429wanneer de lock al actief is (er is al een import bezig),403voor ontbrekende/ongeldige tokens,500voor onopgevangen uitzonderingen. - Bijwerking: elke succesvolle aanroep werkt de optie
as24ci_last_external_cron_runbij, die het tabblad System & Help gebruikt om te bevestigen dat de externe cron actief is. - Een aparte, niet-geauthenticeerde heartbeat wordt geregistreerd telkens wanneer een WordPress-URL wordt aangeroepen met
?as24ci_cron=1, wat handig is voor eenvoudige externe pingers die alleen de bereikbaarheid hoeven te bevestigen.
Het tabblad Import & Limits genereert kant-en-klare voorbeeldcommando's zoals:
*/15 * * * * curl -s "https://example.com/wp-json/as24ci/v1/cron-import?token=YOUR_TOKEN" > /dev/null
*/5 * * * * php /var/www/html/wp-cron.php > /dev/null 2>&1
De eerste regel triggert imports; de tweede houdt niet-importgerelateerde WP-Cron-hooks (afbeeldingswachtrij, opschonen van analytics, prijsbepaling, enz.) actief wanneer DISABLE_WP_CRON true is.
Operationele monitoring
De plugin biedt de signalen die beheerders nodig hebben om te monitoren zonder dat daar extra tools voor nodig zijn:
- Tabblad System & Help / Health. Toont elke cron-hook van de plugin, de volgende geplande uitvoering en of de planning momenteel wordt afgehandeld door WP-Cron of door een externe server-cron. Bevat een kaart die
DISABLE_WP_CRONmarkeert als aanbevolen in de server-cron-modus. - Dashboard-widget. Toont de meest recente import-run, de volgende geplande import (wanneer WP-Cron in gebruik is), de diepte van de afbeeldingswachtrij en de volgende run van de wachtrij.
- Plugin-logs.
wp-content/uploads/as24ci-logs/registreert elke cron-run, het verkrijgen/vrijgeven van locks, activiteiten in de afbeeldingswachtrij en eventuele HTTP-fouten. Logs roteren bij 10 MB met een bewaartermijn van 7 dagen. - Opties voor laatste run.
as24ci_last_external_cron_runen de bijbehorende interne opties kunnen rechtstreeks via WP-CLI worden gecontroleerd voor gescripte waarschuwingen.
Een eenvoudige productie-opstelling is:
- Uptime-controle op de openbare archief-URL (beschikbaarheid van de front-end).
- Uptime-controle op
/wp-json/as24ci/v1/cron-import?token=…die een2xx/429-status retourneert (cron-pad bereikbaar en geauthenticeerd). - Schijfruimtewaarschuwing op het
wp-content/uploads/-volume (groei van afbeeldingen en logs). - Optionele log-shipping of periodieke controle van de logmap van de plugin.
Probleemoplossing
- Imports starten nooit automatisch. Controleer de cron-modus op het tabblad Import & Limits. Als WP-Cron is geselecteerd, kan het zijn dat websites met weinig verkeer de cron helemaal niet activeren — schakel over naar server-cron. Als server-cron is geselecteerd, controleer dan of het curl/wget-commando daadwerkelijk het REST-endpoint bereikt (HTTP 200 of 429 verwacht).
- "An import is already running"-antwoorden (HTTP 429). De lock-transient is nog actief van een vorige run. Wacht tot de run is voltooid, of wis de
as24ci_cron_import_runningtransient als een vorig PHP-proces is gecrasht zonder de lock vrij te geven. Verlaag Vehicles per Run om individuele runs ruim onder de lock-TTL te houden. - Afbeeldingenwachtrij groeit zonder te krimpen. Controleer of
wp-cron.phpwordt uitgevoerd (in server-cron-modus vereist dit de tweede cron-vermelding die hierboven wordt getoond), controleer de logmap op fouten van de queue-worker en verifieer uitgaande HTTPS naar de afbeeldingshosts (zie API-, netwerk- en SSL-vereisten). - Analyses of prijsgegevens worden niet bijgewerkt. Deze worden dagelijks via WP-Cron uitgevoerd; als
DISABLE_WP_CRONtrue is en er geen tweede cron-vermelding is diewp-cron.phpaanroept, zullen dagelijkse taken nooit worden geactiveerd. - Het tabblad System & Help geeft aan dat het cron-token niet is geconfigureerd. Open het tabblad Import & Limits, schakel over naar de server-cron-modus en laat de plugin automatisch een token genereren of plak uw eigen token en sla dit op.
- Token gelekt of geroteerd. Klik op Regenerate Token op het tabblad Import & Limits. Werk elke externe planner onmiddellijk bij, aangezien het vorige token stopt met werken zodra het nieuwe is opgeslagen.
- Cron-runs op staging beïnvloeden productiegegevens. Gebruik een ander cron-token per omgeving en overweeg indien mogelijk een andere AutoScout24-client (zie Hosting Requirements).