Cronjob aanmaken

Algemene uitleg betreffende cronjobs:

Wanneer wel, wanneer niet?
Misschien wel belangrijker dan de uitleg hoe je een cronjob maakt, zijn de redenen waarom je hem niet zou maken. Vaak wordt cron gebruikt voor toepassingen die helemaal geen cron vereisen en de applicatie of de website daardoor alleen maar onnodig ingewikkeld maken. Zo zul je bijvoorbeeld geen cron nodig hebben voor periodieke acties die niet periodiek uitgevoerd hoeven te worden, en sommige vormen van caching. Dat vraagt misschien om een kleine toelichting.

Periodieke acties die niet periodiek uitgevoerd hoeven worden? Dit zijn berekeningen of bewerkingen die afhankelijk zijn van een tijdsinterval, maar waarbij het niet nodig is om dat ook op dat moment uit te voeren. Het is bijvoorbeeld niet nodig om een tabel uit je database elke dag, week of maand te legen, gebruik daarvoor liever de datum functies van je database. Een ander voorbeeld is het uitdelen van salaris. Het gaat er bij het salaris niet om wanneer het uitgedeeld wordt, maar dat het uitgedeeld wordt. Je krijgt als bezoeker je salaris over het aantal periodes dat je nog geen salaris hebt gehad. Je hebt het salaris pas nodig als je je saldo opvraagt, dus bereken je bij het opvragen hoelang iemand al geen salaris heeft gehad en tel je het salaris op bij het saldo. Anders gezegd maakt het niet uit of je elke dag 30 euro op je rekening gestort krijgt of 90 euro als je pas na drie dagen kijkt wat je saldo is.

Een andere toepassing waarvoor cron niet gebruikt moet worden is het cachen van pagina's, afbeeldingen of templates. Althans, niet als kan worden bepaald of de cache verouderd is. Wil je bijvoorbeeld van een externe site, met toestemming van de eigenaar, een grafiek laten zien, dan kun je de grafiek met een bepaald interval downloaden en cachen op je eigen server. Dit doe je dan om de bezoeker niet te hinderen met het trage ophalen van de afbeelding. Ga je zelf je eigen HTML pagina's cachen, dan werk je niet met cron, maar laat je je script kijken of de gecachete pagina verouderd is. Dat kan bijvoorbeeld door te kijken naar de creatietijd van het cache bestand en de tijd van de laatste actie in de database. Afhankelijk daarvan maak je het cache bestand opnieuw en laat je het zien.

Als laatste valkuil voor cron zijn de scripts die blijkbaar elke minuut uitgevoerd moeten worden. Als je dit wil maak je zeer waarschijnlijk een denkfout en ben je bezig een periodieke actie periodiek uit te voeren terwijl dat niet hoeft. Is dat niet het geval, dan moet je nog steeds geen cron gebruiken maar kun je beter een daemon schrijven. Hoe dat moet kun je vast ergens op internet vinden.

Cron gebruik je dus voor acties die je periodiek wil uitvoeren en die ook periodiek uitgevoerd moeten worden. Voorbeelden hiervan zijn bijvoorbeeld het maken van backups van je scripts en de database of het maken van historische statistieken. Waar cron ook zeer geschikt voor is, zijn mailinglijsten en het mailen van rapporten of logbestanden van je site, waardoor je op gezette tijden automatisch op de hoogte wordt gebracht van de status van je website. Als laatste voorbeeld wil ik nog het opschonen van de database noemen, waarbij je moet letten op het verschil tussen opschonen en legen van de database. Onder opschonen valt het verwijderen van records die verouderd zijn of simpelweg niet meer nodig zijn, maar waarbij het wel of niet verwijderen ervan geen invloed heeft op de werking van de website. Vergeet ook niet dat een database geen problemen heeft met tabellen van miljoenen records.

Een leuke manier om te kijken of een hoster cron aanbiedt is kijken of de websites trager worden rond middernacht. Wat vaak gebeurt is dat mensen een cronjob laten uitvoeren om middernacht. Als maar genoeg webmasters dat doen, wordt de server vanzelf trager. Het is dus aan te bevelen de cronjob enkele minuten tot uren na middernacht uit te voeren. Als je je cronjob in de nacht van zaterdag op zondag uitvoert, hou dan rekening met zomer- en wintertijd. Bij het ingaan van de zomertijd zullen cronjobs tussen 2 en 3 uur niet worden uitgevoerd, bij het ingaan van de wintertijd worden ze dubbel uitgevoerd tussen 2 en 3 uur. 

Hoe moet het dan?
Als je hoster je een mooi control panel voorschotelt is het niet al te moeilijk om een cronjob in te stellen, je moet alleen wel weten wat waar ingevoerd moet worden. Heb je SSH toegang tot de server, dan kun je het ook via de Command Line Interface (CLI) doen. Log in op de server en tik in:
crontab -e
Vervolgens zul je je crontable te zien krijgen in je favoriete editor, standaard is dat vi. Deze kun je instellen in het bestand .bash_profile. Zet hiervoor aan het eind van het bestand:
export EDITOR=pico
Je kunt deze regel uiteraard ook gewoon elke keer dat je hem nodig hebt intikken. De editor moet natuurlijk wel geïnstalleerd zijn en niet elke editor zal hiervoor geschikt zijn.

Maar of je nu via een control panel of een editor de crontable bewerkt, je zult dezelfde velden moeten invullen. Voor gewone stervelingen is de crontable opgedeeld in 6 kolommen:
<minuten> <uren> <dagen> <maanden> <weekdagen> <commando>
Deze 6 kolommen kun je weer opdelen in 2 groepen, namelijk het "wanneer" en het "wat". Het "wat" is het eenvoudigst, maar toch weer lastig. Het is namelijk gewoon een commando zoals je dat ook op de CLI zou kunnen opgeven. Op Unix systemen is cron een veelgebruikt programma om bijvoorbeeld logbestanden te archiveren. Je kunt voor <commando> dus alles invullen wat op de CLI ook werkt, mits de gebruiker die de cron uitvoert ook gerechtigd is om het programma uit te voeren. Je kunt hiermee dus bijvoorbeeld ook mysqldump uitvoeren om een backup van je database te maken, want dat doe je uiteraard niet met een PHP script. Let er op dat als je de inloggegevens van je database meegeeft aan mysqldump, dat deze dan tijdens het uitvoeren voor iedereen met toegang tot de CLI leesbaar kunnen zijn. Hoe je nu PHP scripts uit kan voeren met cron leg ik later uit. Het "wanneer" is dus verdeeld in 5 kolommen en elke kolom kan op dezelfde manier worden ingevuld. Voor het aangeven van de momenten waarop de cronjob moet worden uitgevoerd kun je gebruik maken van getallen, het sterretje (*) als wildcard, de komma (,) om waardes te plakken, het minteken (-) om een range aan te geven en de slash (/) voor intervallen. Aan de hand van wat voorbeelden wil ik duidelijk maken hoe je de cronjob kan instellen qua tijd.
1 2 3 4 5               Elke vrijdag (5) die op 3 april (4) valt om 1 minuut over 2
30 4 * * *              Elke dag om half 5 's nachts
30 4-6 * * *            Elke dag om half 5, half 6 en half 7
30 4-8/2 * * *          Elke dag om half 5, half 7 en half 9
30 4,6,8 * * *          Elke dag om half 5, half 7 en half 9
0 15,20 * */2 1-5       Wordt op werkdagen in de even maanden op elke dag 
                             (van de maand) uitgevoerd om 15:00u en om 20:00u.
*/10 8-16,22 * * *      Het commando wordt elke 10 minuten uitgevoerd 
                             tussen 8:00u en 16:59u en tussen 22:00u en 22:59u.
  • 2 gebruikers vonden dit artikel nuttig
Was dit antwoord nuttig?

Gerelateerde artikelen

Domein Pointer

Via DirectAdmin heeft u de optie om een "domain pointer" toe te voegen. Veel klanten is niet...

Hoe wordt mijn schijfruimte berekend ?

De schijfruimte is de totale ruimte die binnen uw account wordt gebruikt. Hieronder vallen: -...

Kan ik meerdere domeinen op mijn shared hosting account hosten?

Ja, dit kan. U kunt bij ons een extra domeinnaam bestellen en deze laten toevoegen aan uw huidige...

Hoe bepaal ik mijn volledig pad ?

oms is het van belang om voor een bepaald script het volledige pad te achterhalen. U kunt dit op...

DirectAdmin Reseller level (Nieuwe klant)

Om een klant toe te voegen moet u op zijn minst 1 hostingpakket aangemaakt hebben. Dit doet u via...