Documentatie · Integratiehandleiding

Server Cron Instellen

Dit document legt uit waarom een echte server cronjob de aanbevolen manier is om imports aan te sturen voor de ADP Car Market Hub-plugin in productie, hoe dit zich verhoudt tot de ingebouwde WP-Cron-scheduler en welke operationele controles moeten worden uitgevoerd zodra deze actief is.

Wanneer u dit document moet gebruiken

Gebruik dit document als u:

  • Een productie-implementatie voorbereidt en beslist hoe geplande imports moeten worden geactiveerd.
  • Migreert van WP-Cron naar een server-side cronjob omdat imports onbetrouwbaar zijn op een website met weinig verkeer.
  • Een host gebruikt die DISABLE_WP_CRON aanbeveelt of vereist om prestatieredenen.
  • Controleert waarom imports te laat starten, alleen tijdens piekuren draaien of helemaal niet starten.
  • De doelgroep is een WordPress-beheerder met toegang tot de cron-functionaliteit van de server (bijvoorbeeld via cPanel, Plesk, het controlepaneel van de hosting of shell-toegang tot een Linux-crontab).

Overzicht

WordPress wordt geleverd met een ingebouwde scheduler genaamd WP-Cron. WP-Cron draait niet continu op de achtergrond — het wordt gecontroleerd wanneer iemand een pagina op de site opvraagt. Op een drukke site is dit meestal prima, maar het heeft een paar bekende beperkingen:

  • Op een site met weinig verkeer worden geplande taken te laat of helemaal niet uitgevoerd omdat geen enkele bezoeker WP-Cron activeert.
  • WP-Cron draait binnen een normaal HTTP-verzoek, dus het deelt de PHP-geheugenlimiet en de uitvoeringstijd van dat verzoek.
  • Meerdere bezoekers die tegelijkertijd aankomen, kunnen strijden om dezelfde geplande taak uit te voeren, wat verspilling is, zelfs als de plugin intern beschermt tegen dubbele uitvoeringen.

Om deze redenen is de aanbevolen productie-installatie om WP-Cron uit te schakelen en deze te activeren via een echte server cronjob. De plugin biedt specifiek voor dit doel een speciaal, met een token beveiligd REST-eindpunt, zodat de cronjob direct een import activeert zonder afhankelijk te zijn van een bezoeker.

De plugin biedt twee cron-modi die u kiest op Car Market Hub → Import & Limieten (de kaart Automatisering):

  • WP-Cron-modus (standaard). Het WP-Cron-schema van de plugin (elk uur, elke 6 uur, twee keer per dag, dagelijks of aangepast met een minimum van 15 minuten) stuurt de imports aan. Geschikt voor ontwikkeling, evaluatie en kleine sites met regelmatig verkeer.
  • Server cron-modus. Het WP-Cron-schema is uitgeschakeld en de import wordt geactiveerd door een server cronjob die het REST-eindpunt van de plugin aanroept. Aanbevolen voor productie.

In beide modi wordt het eigenlijke importwerk uitgevoerd door dezelfde gedeelde runner binnen de plugin — het enige verschil is wat de trigger is.

Waarom server cron wordt aanbevolen in productie

  • Betrouwbare timing. Een server cronjob draait op een vast schema, ongeacht of er op dat moment iemand de website bezoekt.
  • Geen nadeel voor de laadtijd. Imports vertragen de pagina-laadtijd van een echte bezoeker niet, omdat ze in hun eigen PHP-proces draaien.
  • Voorspelbaar resourcegebruik. Een server cronjob draait eenmaal per geplande tijd, in plaats van opportunistisch te worden gestart door elke bezoeker.
  • Eenvoudiger monitoren. Cron-uitvoeringen laten een duidelijk audittraject achter (in de logs van de cron-service en in de logs van de plugin) en kunnen worden gekoppeld aan externe uptime-controles.
  • Compatibel met hosts die WP-Cron beperken of uitschakelen. Sommige managed hosts beperken hoe vaak wp-cron.php intern draait; een externe trigger omzeilt dat.

Server cron werkt ook goed samen met de afbeeldingenwachtrij van de plugin: een tweede cronjob die wp-cron.php met een kort interval aanroept, zorgt ervoor dat de normale taakwachtrij van WordPress (inclusief de verwerking van afbeeldingen) in een voorspelbaar tempo blijft draaien.

Vereisten

Controleer het volgende voordat u overschakelt naar server cron:

  • De plugin is geïnstalleerd, geactiveerd en de API-verbinding werkt. Zie API-inloggegevens instellen en Verbindungstest.
  • De hostingomgeving biedt toegang tot de cron-functionaliteit van de server (cPanel cronjobs, Plesk geplande taken, hosting-controlepaneel cron of een Linux crontab via SSH).
  • De site kan via HTTPS worden bereikt door de cronjob. Voor de meeste hosts draait het cron-commando op dezelfde server en kan het curl gebruiken om terug te bellen naar de site.
  • U bent in staat om wp-config.php te bewerken (dit is vereist om DISABLE_WP_CRON in te stellen).
  • Er is voldaan aan de algemene vereisten voor hosting en cron en achtergrondverwerking.

Stapsgewijze instructies

De kaart Automatisering van de plugin toont de exacte REST-trigger-URL en voorbeeldcommando's voor de huidige installatie. Gebruik die waarden in plaats van URL's uit de documentatie te kopiëren.

  1. Zet de plugin in server cron-modus. Open Car Market Hub → Import & Limieten. Selecteer in de kaart voor de cron-modus Server cron en sla de wijzigingen op. De plugin verbergt de WP-Cron-schemabeheeropties en toont een kaart Server cron instellen met de REST-trigger-URL, het geheime token en voorbeeldcommando's.
  2. Schakel de ingebouwde cron van WordPress uit. Voeg de volgende regel toe aan wp-config.php, ergens boven de opmerking /* That's all, stop editing! */:
   define( 'DISABLE_WP_CRON', true );

Zonder deze regel zullen zowel WP-Cron als de server cronjob proberen imports in te plannen, wat verspilling is, zelfs wanneer de interne vergrendeling van de plugin dubbele uitvoeringen voorkomt.

  1. Kopieer de REST-trigger-URL. De kaart Server cron instellen toont de URL in de vorm https://<your-site>/wp-json/as24ci/v1/cron-import?token=<secret>. Gebruik de knop Kopiëren zodat de URL exact wordt gekopieerd. Behandel het token als een geheim — iedereen die het heeft, kan een import starten.
  2. Voeg de import-cronjob toe. Maak in de cron-functionaliteit van uw server een taak aan die de trigger-URL aanroept met de gewenste frequentie. De plugin vult vooraf een voorbeeld in zoals:
   */15 * * * * curl -s "https://<your-site>/wp-json/as24ci/v1/cron-import?token=<secret>" > /dev/null

Pas de schema-expressie aan (*/15 * * * * betekent elke 15 minuten) om aan de behoeften van de dealer te voldoen. Imports slaan ongewijzigde voertuigen over dankzij wijzigingsdetectie, dus frequente uitvoeringen zijn doorgaans niet belastend.

  1. Voeg een tweede cronjob toe om de taakwachtrij van WordPress draaiende te houden. Omdat DISABLE_WP_CRON ook de wachtrij uitschakelt die wordt gebruikt door de afbeeldingenverwerker van de plugin en door andere WordPress-functies, voegt u een tweede cronjob toe die wp-cron.php rechtstreeks met een kort interval uitvoert. Het voorbeeld van de plugin gebruikt het absolute pad van de WordPress-installatie:
   */5 * * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1

Het pad wordt weergegeven op de kaart Automatisering op basis van de huidige WordPress-installatie. Vervang het door de waarde die daar wordt getoond.

  1. Verifieer met een handmatige uitvoering. Roep vanaf een werkstation de REST-trigger-URL eenmalig aan met curl (of plak deze in een browser). Een succesvolle uitvoering retourneert een JSON-respons die het importresultaat beschrijft. Een 403 met "Invalid or missing token" betekent dat de URL onjuist is gekopieerd.
  2. Verifieer bij de volgende geplande uitvoering. Wacht op de volgende geplande cron-uitvoering, open vervolgens Car Market Hub → Systeem & Hulp en controleer of Laatste externe cron-uitvoering een recente tijdstempel toont.

Voor een alternatieve authenticatiemethode die het token buiten de URL houdt (en dus buiten toegangslogs en proceslijsten), accepteert het eindpunt ook een Authorization: Bearer <token>-header. Bijvoorbeeld:

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

Beide methoden zijn gelijkwaardig; de header-methode heeft de voorkeur wanneer de cron-omgeving aangepaste headers ondersteunt.

Configuratiereferentie

De instellingen die van invloed zijn op de server cron-modus bevinden zich op Car Market Hub → Import & Limieten (kaart Automatisering).

InstellingDoel
Cron-modusSchakelt tussen WP-Cron en Server cron. In de Server cron-modus is het WP-Cron-schema uitgeschakeld en wordt de kaart Server cron instellen getoond.
REST-trigger-URLDe volledige URL die de server cronjob moet aanroepen. Bevat het geheime token als queryparameter. Gegenereerd op basis van de huidige site-URL en het opgeslagen token.
Geheim tokenEen willekeurig token van 32 tekens dat de REST-trigger verifieert. Automatisch gegenereerd bij het eerste gebruik. Gebruik de knop Token opnieuw genereren om een nieuwe uit te geven (de bestaande cronjob moet daarna worden bijgewerkt met de nieuwe URL).
Voorbeeld cron-commando'sVooraf ingevulde voorbeeldcommando's die de huidige trigger-URL en het absolute pad naar wp-cron.php gebruiken. Gebruik de knoppen Kopiëren om ze exact te kopiëren.
Max. voertuigen per cron-runBeperkt het aantal voertuigen dat een enkele importrun verwerkt. 0 betekent onbeperkt. Handig als veiligheidslimiet op gedeelde hosting.
Afbeeldingenwachtrij-modusIndien ingeschakeld, downloaden geplande imports direct alleen de eerste afbeelding per voertuig en plaatsen ze de rest in de wachtrij voor asynchrone verwerking. Aanbevolen in productie.

Operationele opmerkingen

  • Eén scheduler tegelijk. Voer de WP-Cron- en server cron-modus niet parallel uit. Overschakelen naar Server cron in de plugin schakelt het WP-Cron-schema uit; het toevoegen van DISABLE_WP_CRON aan wp-config.php maakt het plaatje compleet door te voorkomen dat WordPress zijn cron-wachtrij uitvoert via front-end verzoeken.
  • De gedeelde runner. Het REST-eindpunt, de WP-Cron-hook en de beheerknop Nu starten delegeren allemaal naar dezelfde importrunner binnen de plugin. Er is geen apart "server cron-importpad" met ander gedrag.
  • Beveiliging tegen gelijktijdigheid. De runner gebruikt een interne, op transients gebaseerde vergrendeling om te voorkomen dat twee imports tegelijkertijd worden uitgevoerd. Zelfs als een cronjob overlapt, wordt de tweede uitvoering direct afgebroken.
  • Vertrouwelijkheid van tokens. Het cron-token geeft het recht om een import te starten. Behandel het als een geheim. Plak geen volledige trigger-URL's in screenshots of tickets; maskeer het token=...-gedeelte voordat u het deelt.
  • Tokenrotatie. Gebruik Token opnieuw genereren telkens wanneer u vermoedt dat het token is blootgesteld, of als onderdeel van een periodieke rotatie. Werk na het opnieuw genereren elke cronjob bij die de URL gebruikt — de vorige URL zal worden geweigerd.
  • Locatie van het eindpunt. Het REST-eindpunt is de standaard WordPress REST-URL …/wp-json/as24ci/v1/cron-import. Als de WordPress site-URL verandert (HTTPS-migratie, domeinwijziging, verhuizing naar multi-site), pas de cronjob dan dienovereenkomstig aan.
  • Externe heartbeat. Elk verzoek aan de site dat ?as24ci_cron=1 bevat, registreert een tijdstempel die het tabblad Systeem & Hulp gebruikt om te bevestigen dat een externe scheduler actief is. Dit is puur informatief en activeert op zichzelf geen import.
  • Bijbehorende taak voor afbeeldingenwachtrij. Wanneer afbeeldingen in de wachtrij worden geplaatst tijdens geplande imports, wordt de wachtrij verwerkt door de WordPress-taakwachtrij. Als u WP-Cron hebt uitgeschakeld, is de tweede cronjob die wp-cron.php aanroept degene die die wachtrij in beweging houdt.
  • Vertrouw niet op testen via de browser. Het plakken van de trigger-URL in een browser werkt voor verificatie, maar mag niet worden gebruikt als de werkelijke trigger — dat is immers afhankelijk van het feit of iemand een browser openhoudt.

Operationele controles na installatie

Doorloop deze controles eenmaal na het overschakelen naar de server cron-modus, en opnieuw na elke grote wijziging (hostingmigratie, URL-wijziging, token opnieuw genereren):

  1. Cron-service is ingeschakeld. Controleer of de cron-functionaliteit van de host actief is en of het gebruikersaccount dat de taak uitvoert, toestemming heeft om het commando uit te voeren.
  2. Gepland commando is correct. De schema-expressie komt overeen met de gewenste frequentie, de URL komt overeen met de waarde die op de kaart Automatisering wordt getoond, en de tweede taak die wp-cron.php aanroept bestaat.
  3. DISABLE_WP_CRON is gedefinieerd. Het tabblad Systeem & Hulp bevestigt dat de constante is ingesteld wanneer u zich in de server cron-modus bevindt.
  4. Laatste externe cron-uitvoering is recent. Het tabblad Systeem & Hulp toont een tijdstempel voor Laatste externe cron-uitvoering binnen het verwachte interval.
  5. Laatste importrun is recent. De dashboard-widget en het tabblad Systeem & Hulp tonen recente activiteit van de importeur.
  6. Logs tonen geen herhaalde authenticatiefouten. Een patroon van 403-reacties in de logs betekent dat de cronjob een verouderd of onjuist token gebruikt.
  7. Afbeeldingenwachtrij loopt leeg. Het tabblad Import & Limieten toont dat de afbeeldingenwachtrij wordt verwerkt (of leeg is).
  8. Optionele externe monitor. Configureer een uptime-monitor of een waarschuwing op hostingniveau die u op de hoogte stelt als de importtaak stopt met draaien.

Controleer deze stappen aan de hand van de huidige plugin-versie voordat u instructies voor klanten publiceert, aangezien labels in de gebruikersinterface tussen releases kunnen veranderen.


Probleemoplossing

SymptoomWaarschijnlijke oorzaakWat te controleren
Cronjob wordt uitgevoerd, maar de respons is 403 met "Invalid or missing token".Het token in de URL is onjuist, bevat spaties of is opnieuw gegenereerd nadat de cronjob is aangemaakt.Kopieer de URL opnieuw van de Automation-kaart en werk het cron-commando bij.
Cronjob wordt uitgevoerd, maar de respons is 403 met "Cron token not configured".Het token is nog niet gegenereerd.Open de Automation-kaart om automatisch een token te genereren en kopieer vervolgens de nieuwe URL.
Cronjob wordt succesvol uitgevoerd, maar het tabblad Systeem & Hulp toont nog steeds geen recente externe uitvoering.De cron-service roept een andere host aan (bijvoorbeeld HTTP in plaats van HTTPS, of www. versus de canonieke hostnaam) en het verzoek wordt omgeleid weg van WordPress.Gebruik de exacte URL die op de Automation-kaart wordt getoond. Controleer of de cron-service van de host de site via HTTPS kan bereiken.
Imports worden uitgevoerd, maar afbeeldingbijlagen verschijnen niet meer.DISABLE_WP_CRON is ingesteld, maar er roept geen cronjob wp-cron.php aan, waardoor de image queue worker nooit wordt uitgevoerd.Voeg de tweede cronjob voor wp-cron.php toe zoals hierboven beschreven.
Imports duren te lang of lopen tegen een geheugenlimiet aan.De PHP CLI-limieten van de host zijn strenger dan verwacht.Verlaag Max vehicles per cron run, houd de image queue-modus ingeschakeld en raadpleeg Cron en achtergrondverwerking.
Imports worden twee keer kort achter elkaar uitgevoerd.Zowel de WP-Cron-modus als een server cronjob zijn actief.Schakel de plugin over naar de Server cron-modus en voeg DISABLE_WP_CRON toe aan wp-config.php.
Cronjob wordt uitgevoerd maar retourneert altijd "Another import is already running".Een eerdere uitvoering is niet voltooid (langlopende batch, time-out aan de hostzijde). De tijdelijke vergrendeling (transient lock) is nog niet verlopen.Wacht tot de vergrendeling is verlopen en onderzoek vervolgens de eerdere uitvoering via de plugin-logs. Zie Cron-fouten.

Gerelateerde documenten