15. nodaļa · 15.1
Cron Taken: taken automatisch laten draaien
Šis raksts vēl nav tulkots. Jūs lasāt holandiešu valodas versiju.
Noskatieties to īsā filmā
Een cron taak (of cronjob) is een opdracht die de server op vaste tijden voor je uitvoert. Bijvoorbeeld elke nacht een script dat oude gegevens opruimt, elk uur een koppeling met je boekhouding, of de geplande taken van WordPress of Laravel. Je stelt dat in bij Cron Taken, onder Geavanceerde Functies.

Regels bij WebOké
Een server deel je met andere websites. Daarom gelden er regels voor cron taken:
- Laat een taak hooguit eens per 10 minuten starten. Dat vragen we van iedereen. De server dwingt het niet af, maar een taak die vaker draait, vertraagt de server voor jou en anderen. Heb je meerdere taken, laat ze dan niet allemaal op hetzelfde moment starten.
- Houd een taak kort. Moet er veel gebeuren, verdeel het werk dan over meerdere rondes.
Een taak aanmaken
- Klik in DirectAdmin onder Geavanceerde Functies op Cron Taken.
- Klik op CRON TAAK AANMAKEN.
- Vul bij Minuut, Uur, Dag van de Maand, Maand en Dag van de Week in wanneer de taak moet draaien (1). Een sterretje * betekent "elke".
- Onder de tijdvelden zie je bij Cronjob wordt uitgevoerd: (2) in gewone taal wanneer de taak draait. Controleer dat.
- Typ bij Opdracht (3) wat er moet gebeuren, met volledige paden (zie hieronder).
- Wil je geen mail na elke keer? Klik op VOORKOM E-MAILS (4).
- Klik op AANMAKEN (5).

De taak staat daarna in de lijst. Wil je hem verwijderen, vink hem dan aan (1) en klik op Verwijder.

Voorbeelden van tijden
| Minuut | Uur | Dag van de Maand | Maand | Dag van de Week | Betekenis |
|---|---|---|---|---|---|
| 30 | 3 | * | * | * | Elke dag om 03:30 |
| */10 | * | * | * | * | Elke 10 minuten |
| 0 | * | * | * | * | Elk heel uur |
| 15 | 8 | * | * | 1-5 | Op werkdagen om 08:15 (1 is maandag, 0 of 7 is zondag) |
| 0 | 2 | 1 | * | * | Op de eerste dag van elke maand om 02:00 |
Je kunt waarden scheiden met komma's (1,15,30), een reeks aangeven met een streepje (5-7) en een interval met */ (*/2 is elke tweede). Kies bij voorkeur een rustig, willekeurig tijdstip, zoals 03:17 in plaats van precies middernacht.
De opdracht: volledige paden
Een cron taak weet niet in welke map hij moet beginnen. Gebruik daarom altijd volledige paden. Je pakket staat op de server in /home/ gevolgd door je DA-gebruikersnaam (zie Je servernaam en DA-gebruikersnaam vinden).
Een PHP-script starten:
/usr/local/bin/php /home/gebruikersnaam/domains/jouwdomein.nl/public_html/taak.php
Dit gebruikt dezelfde PHP-versie als je website, dus de versie uit Select PHP version (zie De PHP-versie kiezen (Select PHP version)).
Een webadres aanroepen (bijvoorbeeld als je software een cron-URL geeft):
curl --silent https://www.jouwdomein.nl/cron.php > /dev/null
WordPress: WordPress start zijn geplande taken standaard als er een bezoeker komt. Bij een drukke site of een site met weinig bezoek kun je dat beter met een cron taak doen. Zet dan in wp-config.php define('DISABLE_WP_CRON', true); en maak een taak die elke 15 minuten /usr/local/bin/php /home/gebruikersnaam/domains/jouwdomein.nl/public_html/wp-cron.php start.
Laravel: /usr/local/bin/php /home/gebruikersnaam/domains/jouwdomein.nl/artisan schedule:run. Let op: schedule:run voert alleen taken uit die precies op het moment van de cron vallen. Draait de cron elke 10 minuten, dan draait een taak die om 08:05 gepland staat nooit.
Mail na elke taak
Geeft een taak uitvoer (tekst of een foutmelding), dan kan de server die per mail sturen. Dat gebeurt alleen als je een adres hebt ingesteld. Je hebt drie mogelijkheden:
- Mail naar een eigen adres: klik op STUUR ALLE CRON UITVOER NAAR E-MAIL, vul een e-mailadres in en klik op OPSLAAN. Dat geldt voor al je taken. Laat je het veld leeg, dan komt er geen mail.
- Geen mail voor één taak: klik bij het aanmaken op VOORKOM E-MAILS. Dan komt er >/dev/null 2>&1 achter je opdracht en gaat de uitvoer van die taak weg, ook als je een adres hebt ingesteld.
- Uitvoer in een logbestand: zet achter je opdracht >> /home/gebruikersnaam/cron-log.txt 2>&1. Dan zie je later in Bestandsbeheer wat de taak deed. Ruim zo'n bestand af en toe op.

Tip: Stel een adres in zolang je een nieuwe taak test. Zo zie je meteen of hij werkt. Zet hem daarna uit of stuur de uitvoer naar een logbestand. Mails van cron taken tellen mee voor de verzendlimiet van je pakket (zie Verzendlimieten en de melding 'message limit reached').
Veelgestelde vragen
Mijn taak geeft "Could not open input file".
Het pad naar het script klopt niet. Controleer het volledige pad in Bestandsbeheer: het begint met /home/gebruikersnaam/domains/.
Mijn script werkt in de browser, maar niet als cron taak.
Een script dat via cron draait, weet niet onder welke website het draait: $_SERVER['SERVER_NAME'] en $_SERVER['DOCUMENT_ROOT'] zijn leeg en relatieve paden in include werken anders. Gebruik in het script volledige paden, of roep het script aan via curl met het webadres.
Kan ik zien wanneer een taak heeft gedraaid?
DirectAdmin houdt dat niet voor je bij. Laat de taak daarom zijn uitvoer naar een logbestand schrijven, met de datum erin (bijvoorbeeld date >> /home/gebruikersnaam/cron-log.txt als eerste opdracht, met ; ertussen).
Wat doet Uitvoeren op @reboot?
Dan draait de taak alleen als de server opnieuw opstart, en niet op vaste tijden. Dat heb je bij een website bijna nooit nodig.
