Cron is een Unix/Linux tool die meestal wordt gebruikt voor het inplannen van commando’s of een script die op de achtergrond draaien binnen een webserver. Een cron job is de taak zelf, die gebruikt wordt om taken te plannen op periodieke vaste tijden, data of intervallen. Meestal gaat het om repetitieve taken die worden geautomatiseerd om tijd te besparen. In WordPress wordt dit afgehandeld door WP-Cron, dat gebruikt wordt om een systeemcron te simuleren.

Enkele voorbeelden van een WordPress cron job zijn het inplannen van een te publiceren bericht of een backup-plugin die volgens een vooraf bepaald schema draait. Vandaag gaan we bekijken hoe je eenvoudig een WordPress cron job kunt aanmaken, wijzigen en uitvoeren.

Zo stel je een cron job in op WordPress

Het is belangrijk op te merken dat WP-Cron iets anders is dan een systeemcron en dat ze elk hun eigen voor- en nadelen hebben. Zo vertrouwt WP-Cron volledig op intervallen, terwijl een systeemcron vertrouwt op specifieke tijden. Een WP-Cron werkt daarnaast alleen als de pagina wordt geladen (backend of frontend), wat minder betrouwbaar kan zijn. De standaardintervallen die WordPress biedt zijn elk uur, tweemaal daags en dagelijks.

Om WP-Cron events te plannen moet je aangepaste hooks maken. We raden je aan het officiële WordPress pluginhandboek te bekijken, dat een geweldige handleiding bevat over het plannen van WP Cron events. Als je op zoek bent naar een alternatieve manier om een systeemcron met WordPress in te stellen, dan raden we je aan het artikel van Tom Mcfarlin over het definiëren van een WordPress cron job te bekijken. En voor degenen die misschien niet zo gevorderd zijn, gaan we onderzoeken hoe je WP-Cron eenvoudig kunt gebruiken samen met de populaire gratis WP Crontrol plugin. Hiermee kun je bekijken en controleren wat er in het WP-Cron systeem gebeurt.

WP Crontrol WordPress plugin
WP Crontrol

WP Crontrol heeft meer dan 200.000 actieve installaties met een indrukwekkende beoordeling van 4,5 uit 5. Veel mensen in de WordPress community lopen weg met deze plugin.

Deze plugin is super handig. Laat zien welke CRON jobs moeten worden uitgevoerd, een uitstekende eerste stap om te begrijpen wat er aan de hand is en of het werkt of niet. 5 Sterren daar. Je kunt ook nieuwe cron jobs aanmaken en bestaande laten uitvoeren, 5 bonussterren daarbovenop. – Josh, maker van Caldera Forms

Je kunt het downloaden uit de WordPress repository of door het te zoeken in je WordPress dashboard onder “Add New” plugins. Features van WP Control zijn onder andere:

  • Mogelijkheid om alle cron events te bekijken, samen met hun argumenten, herhaling en volgende runtime.
  • Bewerken, verwijderen en onmiddellijk uitvoeren van alle cron events.
  • Nieuwe cron events toevoegen.
  • Aangepaste cron schema’s toevoegen, bewerken en verwijderen.

Servercron

Als je een klant van Kinsta bent, hebben wij een servercron job die elke 15 minuten op alle sites draait. Bekijk ons artikel over het beheren van servercrons bij Kinsta.

WP-Cron schema’s

Eenmaal geactiveerd kun je de WordPress Cron job schema’s wijzigen onder “Cron Schedules” vanuit de instellingen van je WordPress dashboard. Merk op dat de plugin een extra standaard schema (wekelijks) toevoegt. Je kunt ook extra schema’s in seconden toevoegen, zoals 21.600 seconden voor elke 6 uur.

Screenshot van WP-Cron schema's
WP-Cron schema’s

Deze intervallen kunnen ook met code worden toegevoegd met behulp van een filter, zoals:

add_filter( 'cron_schedules', 'example_add_cron_interval' );

function example_add_cron_interval( $schedules ) {
 $schedules['five_seconds'] = array(
 'interval' => 5,
 'display' => esc_html__( 'Every Five Seconds' ),
 );

return $schedules;
 }

WP-Cron events

Je kunt de plugin dan ook gebruiken om je huidige WordPress cron jobs te zien die al gepland zijn. Onder Tools klik je in “Cron Events” Veel van de actienamen zijn gemakkelijk te herkennen, want ze moeten overeenkomen met een deel van de pluginnaam, zoals “woocoomerce_cleanup_sessions” of “gravityforms_cron.”

wp-cron events
WP-Cron events

Je voert een Cron event onmiddellijk uit door simpelweg te klikken op “Run Now” naast de actienaam. Dit kan handig zijn bij het oplossen van problemen, omdat je een Cron event misschien meerdere keren moet uitvoeren.

Succesvol uitgevoerd cron event
Succesvol uitgevoerd cron event

Cron event wijzigen

Je kunt ook bestaande cron events  bewerken door te klikken op “Edit” naast de actienaam. Je kunt dan de actienaam, de argumenten, de volgende run en de geplande herhaling wijzigen. Wees hier wel voorzichtig mee, want veel plugins zijn afhankelijk van hun Cron jobs om goed te functioneren.

Cron event wijzigen
Cron event wijzigen

Cron event toevoegen

Je kunt ook cron events toevoegen. In dit voorbeeld gaan we de WordPress cron job voor de Disqus plugin toevoegen. Velen zullen dit willen doen om de synchronisatiefrequentie te veranderen of als ze problemen hebben met het heen en weer synchroniseren van comments. De documentatie van elke externe pluginontwikkelaar zou de naam van hun cron event moeten bevatten, of liever de naam van de actie. In dit geval is het “dsq_sync_forum” die door de plugin wordt gebruikt.

Als je er een vanuit het niets maakt, heb je ergens in je code, zoals in je functions.php bestand, een bijbehorende action hook nodig. Dit is het voorbeeld dat WP-Crontrol geeft:

add_action( 'my_hookname', 'my_function' );

De volgende stap is het schrijven van je functie.

function my_function() {
    wp_mail( '[email protected]', 'WP Crontrol', 'WP Crontrol rocks!' );
}

Voor Disqus voegen we eerst een nieuw cronschema toe van 600 seconden (10 minuten). We klikken dan in “Add Cron Event” en voeren “dsq_sync_forum” in als onze actienaam, kiezen de volgende looptijd, en kiezen de herhaling van 10 minuten die we zojuist hebben aangemaakt. Dan klikken we op “Add Cron Event” Dit zal nu elke 10 minuten automatisch draaien voor ons om handmatig Disqus reacties terug te synchroniseren met onze WordPress database.

WordPress cron job toevoegen
WordPress cron job toevoegen

En dat is het wel zo’n beetje! Het is echt vrij eenvoudig te gebruiken.

WP-Cron WP-CLI

Je kunt WP-Cron events en of een WordPress Cron job ook beheren in WP-CLI. Het volgende commando geeft je bijvoorbeeld je huidige cron event lijst.

wp cron event list

wp-cron event lijst

Zie de officiële WP-CLI cron documentatie voor aanvullende commando’s en parameters.

Zo voeg je een cron job toe met cPanel

Als je een webhost gebruikt die je toegang geeft tot een cPanel account, kun je dit controlepaneel gebruiken om cron jobs in te stellen. Log hiervoor in op je cPanel account en ga naar Advanced > Cron Jobs:

Cron Jobs in cPanel
Cron Jobs in cPanel

De pagina Instellingen Cron Jobs bevat opties voor het instellen van cron job meldingen en het aanmaken van nieuwe. Om een cron job toe te voegen scrol je naar beneden naar de sectie Add New Cron Job.

Hier kun je de frequentie van de opdracht instellen:

Configureer de frequentie van de opdracht
Nieuwe Cron Job toevoegen

Het menu Common Settings bevat verschillende voorgeconfigureerde opties, variërend van eenmaal per minuut tot eenmaal per jaar. Je kunt elk van deze opties gebruiken of de onderstaande velden aanpassen om een aangepaste waarde in te voeren:

Voer aangepaste waarden in
Voer aangepaste waarden in

Zodra je de frequentie van de cron job hebt geconfigureerd, kun je onder het veld Command het commando toevoegen dat het zal uitvoeren. Sla de cron job op door te klikken op Add New Cron Job. Nu verschijnt hij onder de lijst Current Cron Jobs onderaan de pagina.

Zo voeg je een cron job toe in NGINX

Het toevoegen van een cron job in NGINX is relatief eenvoudig als je vertrouwd bent met het gebruik van de terminal en het schrijven van scripts. Om te beginnen open je de terminal en voer je het volgende commando in:

Sudo crontab -e

Hiermee wordt het cron configuratiebestand geopend. Elke regel in het bestand bevat een unieke cron job die er zo uit zou moeten zien:

0 13 * * * /var/www/public_html/cron.php >/dev/null

Om een nieuwe cron job in NGINX toe te voegen, moet je begrijpen wat dat commando doet. De eerste getallen en sterretjes geven aan wanneer de cron job moet draaien.

Elk getal of symbool staat voor de volgende waarden, in volgorde van verschijnen van links naar rechts:

  1. Minuut
  2. Uur
  3. Dag van de maand
  4. Maand
  5. Dag van de week

Dat commando vertelt NGINX om elke dag om 13 uur stipt het bestand cron.php uit te voeren. We gebruiken sterretjes voor de rest van de waarden omdat die niet nodig zijn voor deze specifieke cron job, maar dat kan verschillen.

Naast het opgeven van het uit te voeren bestand, vertelt het commando de cron job ook om uitvoer zoals fouten weg te gooien met de >/dev/null toevoeging. Je kunt er ook voor kiezen om dergelijke uitvoer in een logbestand op te slaan.

Als je klaar bent met het aanpassen van het cron config bestand, kun je de wijzigingen opslaan en het bestand sluiten. Nu zal je NGINX server die cron job uitvoeren met de configuratie die je ervoor hebt ingesteld.

Zo voeg je een cron job toe in Kinsta

Er zijn twee manieren om een cron toe te voegen in Kinsta. De eerste manier houdt in dat je via SSH naar je website gaat en het commando crontab -e uitvoert.

Als je dat commando uitvoert, zal Kinsta je vragen welke editor je wilt gebruiken. Dan opent het het cron config bestand met die editor.

Je kunt cron jobs toevoegen aan het config bestand door nieuwe commando’s op aparte regels te maken. Een cron job commando zou er zo uit moeten zien:

0 13 * * * /var/www/public_html/cron.php >/dev/null

Je kunt meer lezen over hoe je cron commando’s structureert in de vorige sectie, waar we bekeken hoe je het crontab -e commando in NGINX kunt gebruiken. Als je de cron job liever niet handmatig toevoegt, kun je de Kinsta ondersteuningsmedewerkers vragen om dat voor je te doen.

Houd in gedachten dat Kinsta geen cron jobs voor je kan bewerken en dat we gewoon de commando’s uploaden zoals jij ze aanlevert. Als je hulp nodig hebt bij het configureren van het cron commando, raden we je aan deze crontab documentatie te bekijken.

Zo schakel je WP-Cron uit

In sommige gevallen kan het gebruik van de WP-Cron functie problemen veroorzaken met je website. WP-Cron is geen “echte” cron job, maar een functie die nabootst hoe ze werken. In plaats van continu te draaien, draait WordPress het script wp-cron.php telkens als een pagina wordt geladen.

Deze aanpak kan problemen veroorzaken bij websites met veel verkeer, omdat je resources moet inzetten om wp-cron.php bij elke pagina die wordt geladen te laten draaien. Als het script niet draait omdat een pagina wordt geladen, kan het gebeuren dat je geplande opdrachten niet worden uitgevoerd, omdat wp-cron.php de intervallen niet “controleert”.

Als je problemen ondervindt met WP-cron, kun je de functie uitschakelen door de volgende code toe te voegen aan het WordPress wp-config.php bestand:

define('DISABLE_WP_CRON', true);

Sla de wijzigingen in het bestand op en dat is het. Als je er echter voor kiest om WP-Cron uit te schakelen, moet je een alternatief instellen met een van de voorgaande methoden in deze tutorial.