Inhoudsopgave
Veel automatisering draait niet op aanvraag maar op een vast tijdstip: een backup die elke nacht wordt gemaakt, een rapport dat elke maandag wordt gegenereerd, een cache die elk uur wordt vernieuwd. Cronjobs zijn de klassieke oplossing voor dat soort geplande taken en zijn beschikbaar op vrijwel elk Unix-gebaseerd systeem zonder extra installatie. Ze zijn krachtig, lichtgewicht en betrouwbaar, maar vragen wel om een beetje discipline in hoe je ze inricht. Wie dat overslaat merkt vroeg of laat dat een taak al weken stil heeft gestaan zonder dat iemand het doorhad.
De cron syntax begrijpen
De cron syntax bestaat uit vijf velden die samen het tijdstip bepalen waarop een taak wordt uitgevoerd: minuut, uur, dag van de maand, maand en dag van de week. Een waarde van * betekent “elke mogelijke waarde” voor dat veld. 0 3 * * * betekent dus elke dag om 03:00. */15 * * * * betekent elke vijftien minuten. Die syntax is compact maar niet intuïtief voor beginners. Tools zoals crontab.guru (een online validator) helpen je de syntax te controleren voordat je hem in productie zet, wat een hoop frustratie bespaart.
Crontab correct beheren
Cronjobs worden beheerd via de crontab, een gebruikersspecifiek bestand dat je bewerkt met crontab -e. Elke regel is één taak met zijn tijdinstelling en het commando dat uitgevoerd wordt. Gebruik altijd absolute paden voor zowel het uit te voeren script als de bestanden die het script gebruikt, want cronjobs draaien in een minimale omgeving zonder de gebruikelijke shell-variabelen zoals PATH. Een script dat in je terminal werkt kan in een cronjob falen puur omdat hij een commando niet kan vinden. Voeg daarom bovenaan je crontab een expliciete PATH definitie toe.
Output en logging
Standaard stuurt cron de output van een taak naar de lokale mailbox van de gebruiker, wat op de meeste servers nergens naartoe gaat. Redirect output expliciet naar een logbestand zodat je kunt zien wat er is gebeurd: >> /var/log/mijn-taak.log 2>&1 achter je commando vangt zowel stdout als stderr op. Roteer die logbestanden met logrotate zodat ze niet onbeperkt groeien. Voor kritieke taken is het ook verstandig om een timestamp te loggen bij elke uitvoering, zodat je direct kunt zien of een taak op het verwachte tijdstip heeft gedraaid.
Monitoring en foutmeldingen
Een cronjob die faalt zonder dat iemand het merkt is erger dan geen cronjob. Voeg monitoring toe door aan het einde van een succesvolle uitvoering een ping te sturen naar een tool zoals Healthchecks.io of Better Uptime. Die tools verwachten op vaste intervallen een signaal en sturen een melding als dat uitblijft. Combineer dat met foutafhandeling in je script dat bij een fout een notificatie stuurt via e-mail of Slack. Zo weet je binnen minuten als iets misgaat in plaats van pas als een collega klaagt dat de data niet klopt.
Alternatieven voor complexere behoeften
Cronjobs zijn ideaal voor eenvoudige, periodieke taken maar hebben beperkingen. Ze bieden geen ingebouwde retry-logica bij fouten, geen afhankelijkheidsbeheer tussen taken en geen centrale interface om alles te overzien. Voor complexere workflows zijn tools zoals Airflow (voor data pipelines), Celery Beat (voor Python applicaties) of Systemd timers (als modern alternatief voor cron op Linux) betere keuzes. Die tools voegen betrouwbaarheid, zichtbaarheid en flexibiliteit toe die je bij groeiende automatisering vroeg of laat nodig hebt.