Websites
Cron-taken instellen en beheren
A cron job runs a command on a schedule, in the background, whether or not anyone is visiting your site. This guide covers adding one in KPanel, writing the schedule and the command correctly for…
Instellingen en beheer van cronjobs
Een cronjob voert een commando volgens een schema uit, op de achtergrond, ongeacht of iemand uw site bezoekt. Deze handleiding behandelt het toevoegen ervan in KPanel, het correct schrijven van het schema en het commando voor dit platform, het vervangen van de onbetrouwbare ingebouwde scheduler van WordPress, en het vinden van de uitvoer wanneer een job niet doet wat u verwachtte.
Waar Cron zich bevindt in KPanel
Cron behoort tot een site, dus u bereikt het via de site en niet via het hoofdmenu:
- Meld u aan bij KPanel en klik op Websites in de linker zijbalk.
- Klik op de site die u wilt.
- Klik in het eigen menu van de site op Advanced, dan Cron.
Het directe adres is /websites/<site-id>/cron. U ziet een tabel met bestaande jobs, of een lege status als de site er geen heeft.

Een job toevoegen
Klik op Add Cron Job in de rechterbovenhoek. Het formulier heeft drie velden.
Schema
Zes vooringestelde knoppen vullen de expressie voor u in:
| Knop | Expressie |
|---|---|
| Elke minuut | * * * * * |
| Elke 5 min | */5 * * * * |
| Elk uur | 0 * * * * |
| Dagelijks 2 uur | 0 2 * * * |
| Wekelijks zondag | 0 2 * * 0 |
| Maandelijks 1e | 0 2 1 * * |
Of typ uw eigen expressie in Cron expression. De vijf velden zijn op volgorde: minuut, uur, dag van maand, maand, dag van week:
minute hour day-of-month month day-of-week
0 3 * * *draait om 3:00 uur elke dag.*/15 * * * *draait elke vijftien minuten.0 9 * * 1draait om 9:00 uur elke maandag.30 1 1 * *draait om 1:30 uur op de eerste van elke maand.0 */6 * * *draait elke zes uur, op het hele uur.
Label
Een naam die u later herkent, zoals WordPress cron of Nightly stock sync. Dit is wat de jobs tabel u toont, dus maak het beschrijvend: job 3 helpt niemand om 2 uur 's nachts.
Commando
Het shell-commando dat moet worden uitgevoerd. Klik op Save om de job te maken.
Gebruik volledige paden. Cron draait met een minimale omgeving en geen van uw shell-profiel, dus een eenvoudige php of een relatieve map die werkt wanneer u bent aangemeld via SSH, zal hier stilzwijgend mislukken. Schrijf het volledige pad uit, elke keer.
Het commando schrijven
Jobs worden uitgevoerd als de systeemgebruiker van uw site, dus uw basismap is het juiste ankerpunt en ~ wordt correct opgelost. De bestanden van uw site bevinden zich op:
~/htdocs/yourdomain.co.nz
U kunt het exacte pad bevestigen op het tabblad Files van de site, vervolgens SFTP, waar het wordt afgedrukt onder Site files.
Typische commando's:
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now
cd ~/htdocs/yourdomain.co.nz && /usr/bin/php bin/send-queued-emails.php
/usr/bin/curl -fsS https://yourdomain.co.nz/api/nightly-report
Test het commando voordat u het inplant. Plak het in de sectie WordPress van de site, dan Console als het een wp commando is, of voer het uit via SSH. Een job die toch nooit zou werken, is veel gemakkelijker op te sporen in de prompt dan om 3 uur 's nachts in een logbestand.
WordPress's ingebouwde scheduler vervangen
WordPress wordt geleverd met zijn eigen pseudo-scheduler, WP-Cron, die alleen wordt geactiveerd wanneer iemand een pagina laadt. Op een rustige site worden geplande berichten laat gepubliceerd en e-mails blijven onverzonden in de wachtrij. Op een drukke site betaalt elke bezoeker de prijs van het controleren van het schema.
Een echte cronjob lost beide op. KPanel doet de hele wisseling voor u:
- Open de site, vervolgens het tabblad WordPress.
- Open de sectie WP-Cron.
- Klik op Enable system cron.
Dit voegt een schema toe dat WP-Cron elke vijf minuten uitvoert en stelt DISABLE_WP_CRON in zodat paginaladingen het niet langer activeren. Remove system cron op hetzelfde scherm draait beide delen terug.
Als u het liever handmatig doet, zijn het twee stappen:
Schakel de door bezoekers geactiveerde versie uit. Voeg dit toe aan wp-config.php, boven de /* That's all, stop editing! */ regel, met behulp van Files, vervolgens File Manager:
define( 'DISABLE_WP_CRON', true );
Voeg de echte job toe. In Advanced, vervolgens Cron:
- Schema:
*/5 * * * * - Label:
WordPress cron - Commando:
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now
Sla het DISABLE_WP_CRON gedeelte niet over. Met beide draaiend kan elke geplande taak twee keer worden uitgevoerd: dubbele e-mails, dubbele orderverwerking, dubbele kosten bij een abonnementsplugin. Gebruik de acties met één klik in de WP-Cron sectie en dit kan u niet overkomen.
WooCommerce en achtergrondwachtrijen
WooCommerce gebruikt een achtergrondwachtrij voor statuswijzigingen van bestellingen, vernieuwing van abonnementen, e-mails en voorraadupdates. Dit is afhankelijk van WP-Cron, dus dit is precies de werkbelasting die op een rustige winkel lijdt.
Zodra het echte schema actief is, wordt de wachtrij elke vijf minuten verwerkt. Controleer dit op WooCommerce, vervolgens Status, vervolgens Scheduled Actions in wp-admin.
Een winkel met hoog volume kan naar */2 * * * * gaan. Eronder gaan helpt zelden: u besteedt meer tijd aan het starten van processen dan aan werk. Zie Setting Up WooCommerce.
Bestaande jobs beheren
De jobs tabel toont Label, Schedule, Command, Last run en Status, met twee acties per rij:
- Disable pauzeert een job zonder deze te verwijderen, en verandert in Enable om deze terug te brengen. Gebruik dit wanneer u test of een job een probleem veroorzaakt.
- Delete verwijdert het permanent. U wordt gevraagd dit te bevestigen, en geplande runs stoppen onmiddellijk.
Het verwijderen van een cronjob kan niet ongedaan worden gemaakt. Het schema wordt op dat moment van de server verwijderd. Als u het alleen tijdelijk wilt stoppen, gebruikt u Disable.
De uitvoer vinden
Elke job die Kapsule maakt, krijgt de uitvoer voor u vastgelegd. Standaarduitvoer en fouten worden toegevoegd aan een logbestand in een cron-logs map in de basismap van de sitgebruiker, één bestand per job.
Dit logboek is het antwoord op bijna elke vraag "heeft mijn job gedraaid?", omdat het vastlegt wat het commando heeft afgedrukt en elke fout die het heeft veroorzaakt.
Om het te lezen, maakt u verbinding via SSH en kijkt u in ~/cron-logs/. SSH gebruikt sleutelverificatie, dus voeg eerst uw openbare sleutel toe via het tabblad SSH Keys van de site onder Files: zie Adding SSH Keys.
De File Manager en SFTP-accounts zijn beperkt tot uw sitemap, ~/htdocs/yourdomain.co.nz, en cron-logs bevindt zich één niveau erboven. Dit is opzettelijk: het houdt een aannemer met SFTP-toegang buiten alles behalve de website. Gebruik native SSH om de logbestanden te bereiken, of zet uitvoer om in uw sitmap zoals hieronder wordt weergegeven.
Als u de uitvoer liever op een plaats hebt waar File Manager deze kan openen, zet u deze zelf om:
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now >> ~/htdocs/yourdomain.co.nz/wp-content/cron.log 2>&1
2>&1 stuurt fouten naar hetzelfde bestand als normale uitvoer. Zonder het gaan fouten nergens heen.
Alles in uw sitmap kan potentieel via het web worden aangevraagd. Zet een omgeleide log onder wp-content in plaats van in de basismap van de site, geef het een naam die niemand zou raden, en verwijder deze zodra u klaar bent met debuggen.
Goede praktijk
- Spreid uw schema's uit. Zes jobs allemaal ingesteld op
0 2 * * *starten allemaal tegelijk. Spreid ze uit:0 2,10 2,20 2. - Gebruik niet elke minuut tenzij u het echt nodig hebt.
*/5is genoeg voor bijna alles, inclusief WordPress en WooCommerce. - Houd jobs kort. Een job die langer duurt dan zijn interval zal overlappen met de volgende run.
- Zet uitvoer om voor alles wat rumoerig is, zodat één pratende job uw schijf niet volmaakt.
- Controleer de lijst af en toe. Jobs die zijn achtergelaten van een plugin die u hebt verwijderd, blijven draaien.
Probleemoplossing
De job lijkt nooit te worden uitgevoerd. Controleer eerst het pad. Open het logbestand. Bevestig vervolgens dat de status Active is en niet Disabled. Voer vervolgens hetzelfde commando uit via SSH en kijk wat het zegt.
"command not found" in het logboek. Een ontbrekend volledig pad. Gebruik /usr/bin/php, /usr/bin/wp, /usr/bin/curl in plaats van de blote naam.
Toestemming geweigerd. De job draait als de systeemgebruiker van uw site. Die gebruiker moet eigenaar zijn van, of op zijn minst kunnen lezen, alles wat het commando aanraakt. Controleer machtigingen in Using the File Manager.
WordPress-taken worden nog steeds laat uitgevoerd. Bevestig dat beide helften van de wisseling op hun plaats zijn: het schema bestaat in Advanced, vervolgens Cron, en DISABLE_WP_CRON is ingesteld. De sectie WP-Cron op het tabblad WordPress toont de huidige status van beide.
De job draait maar de site is traag terwijl deze dit doet. Verplaats het naar een rustiger uur, of verdeel het werk in kleinere batches. Het brongebruik op siteniveau is zichtbaar onder Performance: zie Improving Website Speed.
Een job werkte niet meer na een plugin-update. Het commandopad kan zijn gewijzigd. Controleer het logbestand, werk vervolgens het commando bij vanuit de jobs tabel door de oude job te verwijderen en een gecorrigeerde in te voegen.