Wat zijn cronjobs en hoe stel je ze in?

blog-header

Zo hou je de performance en data-integriteit op orde

Je neemt elke dag dezelfde route naar je werk. Eenmaal aangekomen, realiseer je je dat je niks meer weet van de reis er naar toe. Je weet zelfs niet of je de auto wel op slot hebt gedaan. Je kunt teruglopen naar de parkeerplaats om het te controleren, maar je weet ook dat je jezelf dat tripje kunt besparen. Het is namelijk nog nooit voorgekomen dat de auto niet op slot was. Je hebt op de automatische piloot de deur op slot gedaan.

Zo werkt het ook met cronjobs. Cronjobs zorgen ervoor dat bepaalde, terugkerende taken op de automatische piloot gebeuren. Handig, want het kost jou minder denkkracht en zorgt ervoor dat je routinematige taken niet zelf hoeft uit te voeren. Bovendien draagt het bij aan de performance en data-integriteit van je website of webshop.

Maar, wat zijn cronjobs en hoe stel je ze in? Daarover lees je in deze blog.

Inhoud van dit artikel


Wat zijn cronjobs?

Een cronjob - ook wel crontab - is een commando dat door een programma of script op een bepaalde tijd wordt uitgevoerd. Het woord ‘cron’ is afkomstig van het Engelse woord chronograph, een soort stopwatch. Een cronjob zorgt ervoor dat bepaalde taken automatisch periodiek plaatsvinden. ¹

Cronjobs worden gebruikt voor het automatiseren van systeemonderhoud of het maken van back-ups. Ook voor PhP-functies, het genereren van overzichten (zoals openstaande orders of contactformulieraanvragen) en logrotate zijn cronjobs ideaal.

Hoe stel je een cronjob in

Het instellen van een cronjob is vrij eenvoudig. Met het commando “crontab -e” open je de teksteditor voor het invoeren van cronjobs.

Cronjobs stel je in op deze volgorde:
<minuten> <uren> <dagen> <maanden> <weekdagen> <commando>

De interval van de cronjob bepaal je zelf. Je kunt kiezen uit verschillende tijdseenheden:
.------------ Minuut (0 - 59)
|  .---------- Uur (0 - 23)
|  |  .-------- Dag van de maand (1 - 31)
|  |  |  .------ Maand (1 - 12) of januari, februari, maart...
|  |  |  |  .---- Dag van de week (0 - 6) (zondag is 0 of 7) of zondag, maandag, dinsdag...
|  |  |  |  | 
* * * * *   commando dat uitgevoerd moet worden

Een * (sterretje/asterisk) betekent: alle toegestane waarden. Om elk uur een taak uit te voeren, noteer je een sterretje in het uurveld.

Een aantal voorbeelden ter illustratie:

  • Om een kalendercommando uit te voeren om 06.15 uur op elke maandag, woensdag en vrijdag voer je dit in:

    15 6 * * 1,3,5 / bin/php/locatie/van/jouw/php/script.php

  • Wil je in de maand september dagelijks om middernacht een onderhoudstaak uitvoeren? Voer dan het volgende in:

    0 0 * 9 * /roep/hier/je/eigen/functie/of/script/aan.sh

  • Een bepaalde taak iedere 5 minuten uitvoeren? Dat kan op deze manier:

    */5 * * * * /jouw/taak.sh


Op iedere nieuwe regel in een crontab kan een nieuwe cronjob gedefinieerd worden.

Overlap voorkomen

Een veelvoorkomend probleem: je hebt een taak ingepland die meer tijd kost dan verwacht. Dit betekent dat sommige taken elkaar overlappen en tegelijkertijd plaatsvinden. Als de cronjobs dan dezelfde data gebruiken, kan er datacorruptie ontstaan. In het geval van zware gegevensverwerking wordt ook de server te zwaar belast. Door die hoge belasting duren cronjobs langer dan normaal en voordat je er erg in hebt, kom je in een vicieuze cirkel terecht waardoor je website trager en trager wordt. Dát wil je niet.

Gelukkig is er een eenvoudige oplossing voorhanden: flock!

Flock is een handige tool die lock files aanmaakt, waardoor een bepaalde cronjob niet meerdere keren op hetzelfde moment wordt opgestart. Flock zorgt voor een als-dan-scenario: áls er een lock file is dán wordt de cronjob niet opnieuw gestart. Zodra de cronjob is uitgevoerd en afgerond, verwijdert flock het lock file. Daarna wordt de cronjob opnieuw gestart. Fijn, want zo weet je zeker dat de productvoorraad correct is en blijft.

Een voorbeeld:

* * * * * /usr/bin/flock -n -E 0 /tmp/niet-gelijktijdige-taak.lock /usr/bin/php /home/gebruiker/niet-gelijktijdige-taak.php

Vragen over cronjobs

Heb je vragen over cronjobs of heb je hulp nodig bij het instellen ervan? Neem contact op! Mijn collega en ik helpen je graag verder.


4

Interesse? Laten we kennismaken!

Hoe kunnen we jouw helpen? We maken graag persoonlijk kennis. Vertel ons wat je wensen en eisen zijn. Dan geven we jou het juiste advies en overtreffen we jouw verwachting.

In contact komen
DNV-certified