Crontab generator & cron-uitdrukking bouwen
Bouw, valideer en ontleed cron-uitdrukkingen in je browser. Live preview van de volgende run in lokale tijd of UTC. POSIX 5-veld syntaxis, presets, uitleg in begrijpelijk Nederlands. Gratis, privé, geen account nodig.
In begrijpelijke taal
—
Volgende 5 geplande runs
Ons team verifieert de crontab generator tegen POSIX cron (vixie/BSD), Quartz, Kubernetes CronJob, GitHub Actions en AWS EventBridge — inclusief de POSIX dag-van-de-maand / dag-van-de-week OR-regel, benoemde maanden/weekdagen, macro's (@daily enz.), zes-veld seconden-modus en jaar-cap op onmogelijke planningen.
Wat is een cron-uitdrukking?
Een cron-uitdrukking is een vijf-veld string die een terugkerende planning definieert. Van links naar rechts zijn de velden minuut (0-59), uur (0-23), dag-van-de-maand (1-31), maand (1-12) en dag-van-de-week (0-6, waarbij 0 en 7 beide zondag betekenen). Elk veld accepteert een waarde, een lijst (1,3,5), een bereik (1-5), een wildcard (* betekent elke waarde) of een stap (*/15 betekent elke 15). De combinatie bepaalt precies wanneer het geplande commando zal draaien — 0 9 * * 1-5 lees je bijvoorbeeld als "op minuut 0, uur 9, elke dag-van-de-maand, elke maand, dag-van-de-week maandag tot en met vrijdag" — oftewel in begrijpelijke taal: "doordeweeks om 9:00 uur".
Cron is ontstaan in Unix Version 7 in 1979 en de vijf-veld grammatica is in ruim vier decennia in essentie onveranderd gebleven — een bewijs van hoe goed ontworpen de oorspronkelijke syntaxis is. Vandaag worden cron-uitdrukkingen ver buiten het Unix crontab-bestand gebruikt: Kubernetes CronJobs, GitHub Actions workflows, AWS EventBridge rules, GitLab CI scheduled pipelines, Cloudflare Workers Cron Triggers en serverless platforms in elke cloud accepteren allemaal dezelfde vijf-veld grammatica. Cron één keer leren betekent dat je weet hoe je jobs plant in elke moderne infrastructuurcontext.
De POSIX-standaard definieert vijf operatoren: * (elke waarde), , (lijst met waarden), - (bereik), / (stap) en benoemde tokens voor maanden (JAN-DEC) en weekdagen (SUN-SAT). De meeste implementaties breiden ook vijf veelgebruikte snelkoppelingen uit: @yearly (0 0 1 1 *), @monthly (0 0 1 * *), @weekly (0 0 * * 0), @daily (0 0 * * *) en @hourly (0 * * * *). De Quartz-scheduler (een Java-bibliotheek) breidt dit uit met een optioneel seconden-veld en extra operatoren (?, L, W, #) — handig als je in Java/Spring werkt, maar niet portable naar standaard cron. Deze tool volgt de POSIX vijf-veld standaard omdat dat de dominante variant is en degene die je Linux-server, GitHub Actions runner en Kubernetes-cluster daadwerkelijk verstaan.
Eén bijzonderheid van POSIX cron verdient speciale aandacht: wanneer zowel dag-van-de-maand als dag-van-de-week beperkt zijn (geen van beide is *), draait de planning wanneer ÉÉN van beide matcht — OR-semantiek, geen AND. Dus 0 0 1 * 5 draait op de 1e van elke maand ÉN elke vrijdag, niet alleen op vrijdagen die toevallig op de 1e vallen. Dit is de meest voorkomende cron-verrassing; de preview van de volgende run in deze tool maakt het duidelijk door de werkelijke datums en tijden te tonen waarop de planning zal afgaan. Verifieer voordat je deployt.
Alle ontleding en berekening van de volgende run gebeurt volledig in je browser met JavaScript — geen uitdrukkingen, planningen of andere data worden ooit naar een server gestuurd. Deze tool ontleedt elke standaard POSIX cron-uitdrukking direct met uitleg in begrijpelijke taal en een preview van vijf runs, met volledige privacy.
Cron-uitdrukkingen zijn nauw verwant aan andere developer-tools. Cron jobs worden vaak gedebugd door Unix-timestamps te vergelijken met de verwachte runtijden, en complexe planningen worden vaak gedocumenteerd als JSON-configuratie die je kunt valideren met onze JSON-formatter. Voor een diepgaande gids die de OR-semantiek, tijdzone-valkuilen en veelvoorkomende cron-varianten behandelt met voorbeelden in Linux, Kubernetes en GitHub Actions, lees onze cron-planning referentie.
# Linux crontab entry — runs every 15 minutes
*/15 * * * * /usr/local/bin/poll-api.sh
# Kubernetes CronJob — weekdays at 9:00 AM UTC
apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-report
spec:
schedule: "0 9 * * 1-5"
timeZone: "UTC"
jobTemplate:
spec:
template:
spec:
containers:
- name: report
image: report-runner:1.0
restartPolicy: OnFailure
# GitHub Actions workflow — hourly
on:
schedule:
- cron: '0 * * * *'
# AWS EventBridge — first of each month
ScheduleExpression: cron(0 0 1 * ? *)
# (Note: AWS uses the Quartz 6-field form with '?' for day-of-week) Belangrijkste functies
Live POSIX 5-veld parser
Strikte parser volgens POSIX cron: minuut (0-59), uur (0-23), dag-van-de-maand (1-31), maand (1-12 of JAN-DEC), dag-van-de-week (0-6 of SUN-SAT, waarbij 7 ook zondag accepteert). Alle standaardoperatoren (* , - /) en macro's (@yearly @monthly @weekly @daily @hourly) ondersteund.
Preview van de volgende 5 runs
Berekent de eerstvolgende vijf geplande runtijden vanaf je huidige lokale tijd. Wissel met één klik tussen Lokaal en UTC — de betrouwbaarste manier om tijdzone-verrassingen te vangen voordat je een crontab op een server in een andere regio deployt.
Beschrijving in begrijpelijk Nederlands
Elke geldige uitdrukking krijgt een leesbare uitleg: "Elke 15 minuten", "Doordeweeks om 9:00 uur", "Om 02:30 op dag 1 van de maand, in januari en juli". Maakt code review en overdracht moeiteloos — niet meer gokken wat */5 9-17 * * 1-5 precies doet.
Foutmeldingen op veldniveau
Ongeldige uitdrukkingen krijgen direct rode feedback met het overtredende veld gemarkeerd en een specifieke fout: "Fout in minuut: waarde buiten bereik [0, 59]: "60"". Geen stilzwijgende crontab-storingen meer die je drie dagen later ontdekt omdat het rapport niet draaide.
Presets voor veelgebruikte planningen
Elf one-click presets dekken de planningen die je daadwerkelijk gebruikt: elke minuut, elke 5/15 minuten, elk uur, dagelijks om middernacht of 9:00 uur, doordeweeks om 9:00 uur, wekelijks op zondag/maandag, eerste van elke maand en jaarlijks. Tik, tweak, ship.
Invoervelden per positie
Geen vijf-veld volgorde onthouden — vijf kleine invoervelden met labels Minuut, Uur, Dag van de maand, Maand en Dag van de week laten je één positie tegelijk bewerken zonder een waarde te laten vallen of de volgorde door elkaar te halen. De volledige uitdrukking bovenaan bouwt automatisch opnieuw op.
POSIX OR-semantiek correct afgehandeld
Wanneer zowel dag-van-de-maand als dag-van-de-week beperkt zijn, treedt de OR-regel in werking — 0 0 1 * 5 draait elke 1e ÉN elke vrijdag. De preview van de volgende run maakt dit zichtbaar voordat je deployt; geen verrassings-pagina's meer in het weekend.
100% privacy in de browser
Je cron-uitdrukkingen — die vaak infrastructuur-timing en interne planningspatronen prijsgeven — verlaten je browser nooit. Er wordt geen data naar een server gestuurd, geen logging, geen analytics. Je kunt dit verifiëren in het Netwerk-tabblad van je browser. Veilig voor productie-planningen en interne systemen.
Quartz-bewuste foutmeldingen
Plak je een Quartz-uitdrukking met ? L W of #, dan legt de parser uit "Quartz-operatoren niet ondersteund — gebruik POSIX-syntaxis" zodat je weet dat je voor cron moet herschrijven in plaats van een stille storing te debuggen. Quartz-planningen draaien niet op Linux cron.
Cron-varianten & schedulers
Vixie cron (Linux-standaard)
5-veld POSIXDe standaard op de meeste Linux-distributies. Strikt POSIX met CRON_TZ= uitbreiding voor expliciete tijdzone. Dag-van-de-maand / dag-van-de-week OR-semantiek geldt. Het primaire doel van deze tool.
BSD cron
5-veld POSIXStandaard op macOS en de BSD-familie. POSIX-compatibel met kleine implementatieverschillen ten opzichte van vixie cron; de meeste uitdrukkingen werken identiek.
systemd-timers (OnCalendar)
calendar spec, geen cronAlternatief voor cron op systemd-gebaseerde Linux. Gebruikt OnCalendar: 2026-*-* 09:00:00 syntaxis — leesbaarder voor niet-terugkerende planningen maar niet uitwisselbaar met cron-uitdrukkingen.
Quartz Scheduler (Java/Spring)
6 of 7 veldenVoegt seconden (verplicht) en jaar (optioneel) toe, plus operatoren ?, L, W, #. Handig voor Java-apps maar niet portable naar Linux cron.
AWS EventBridge
6-veld Quartz-stijl met? Vereist dat dag-van-de-week of dag-van-de-maand ? is (Quartz-conventie) in plaats van * wanneer slechts één van beide beperkt is. Uitdrukkingen porten niet rechtstreeks naar Linux cron.
Kubernetes CronJob
5-veld POSIX + timeZone-veldPOSIX 5-veld planning plus spec.timeZone veld (1.27+). Schoner dan leunen op de host-tijdzone van de kubelet. Uitdrukkingen porten rechtstreeks vanuit Linux cron.
GitHub Actions
5-veld POSIXDraait altijd in UTC. Best-effort timing — kan onder hoge belasting worden overgeslagen. Vermijd intervallen korter dan 15 minuten. Uitdrukkingen porten rechtstreeks vanuit Linux cron.
Voorbeelden van cron-uitdrukkingen
Elke 15 minuten
*/15 * * * *
Stap-operator: */15 in het minuut-veld betekent "elke 15 minuten vanaf minuut 0" — dus runs op :00, :15, :30 en :45 op elk uur van elke dag. Het meest gebruikte interval voor het pollen van API's, het verversen van caches en heartbeat-checks.
Doordeweeks om 9:00 uur
0 9 * * 1-5
Bereik 1-5 in het dag-van-de-week-veld betekent maandag tot en met vrijdag (1=ma, 5=vr). Draait precies om 09:00 — handig voor rapportages tijdens kantooruren, batchjobs die afhankelijk zijn van nachtelijke data en dagelijkse standup-reminders.
De eerste van de maand om middernacht
0 0 1 * *
Dag-van-de-maand 1, alle andere lagere velden op nul. Gangbaar voor maandelijkse facturatie, log-rotatie en eindperiode-reconciliatie. Dag-van-de-maand en dag-van-de-week zijn alleen beide beperkt wanneer geen van beide * is — hier is dag-van-de-week * dus alleen de dag-van-de-maand telt.
Elke 5 minuten tussen 9:00 en 17:00, doordeweeks
*/5 9-17 * * 1-5
Combineert stap (*/5) met bereik (9-17) op verschillende velden. Handig voor monitoring alleen tijdens kantooruren of het leegtrekken van queues. Totaal: 12 runs/uur × 9 uur × 5 dagen = 540 runs per werkweek.
Per kwartaal: 1e van jan, apr, jul, okt om middernacht
0 0 1 JAN,APR,JUL,OCT *
Maandnamen in een door komma's gescheiden lijst. Kwartaalplanningen zoals financiële afsluiting, code-freeze reviews of compliance-audits. Je kunt namen en getallen mixen (1,APR,7,10 ontleedt hetzelfde), maar houd één stijl aan voor de leesbaarheid.
POSIX OR-valkuil: 1e van de maand ÓF elke vrijdag
0 0 1 * 5
Wanneer ZOWEL dag-van-de-maand (1) ALS dag-van-de-week (5) beperkt zijn, draait POSIX cron de job als ÉÉN van beide matcht. Dus dit gaat af op de 1e van elke maand ÉN elke vrijdag — niet alleen vrijdagen die op de 1e vallen. Dit is de meest voorkomende cron-verrassing; de preview van de volgende run maakt het direct duidelijk.
Elke dag om 02:30 (rustige uren)
30 2 * * *
Specifieke waarden voor zowel uur als minuut, wildcards op de rest. Het venster 02:00-04:00 UTC is de facto de conventie voor nachtelijke batchjobs omdat het met geen enkele grote zakelijke regio overlapt qua kantooruren. Combineer met de UTC-toggle om te bevestigen dat de run valt waar je hem verwacht.
Macro-equivalent: @daily
@daily
De snelkoppeling @daily (ook @midnight) wordt uitgebreid naar 0 0 * * * — elke dag om middernacht. Andere macro's: @yearly = 0 0 1 1 *, @monthly = 0 0 1 * *, @weekly = 0 0 * * 0, @hourly = 0 * * * *. Macro's zijn beknopt maar de vijf-veld vorm is beter portable tussen schedulers (sommige ondersteunen macro's, andere niet).
Zo bouw je een cron-uitdrukking
- 1
Typ of plak een cron-uitdrukking
Voer een vijf-veld cron-uitdrukking in het invoerveld hierboven (bijv.
*/15 * * * *). De tool ontleedt en valideert terwijl je typt — groen vinkje voor geldig, rode fout met veldnaam voor ongeldig. Macro's zoals@daily,@hourly, enz. worden ook geaccepteerd. - 2
Of pas de vijf veldinvoeren aan
Geen veld-volgorde onthouden — bewerk Minuut, Uur, Dag-van-de-maand, Maand of Dag-van-de-week los van elkaar via de gelabelde invoervelden. De volledige uitdrukking bovenaan updatet automatisch. Gebruik
*voor wildcards,*/Nvoor stappen,a-bvoor bereiken en1,3,5voor lijsten. - 3
Kies een preset als startpunt
Tik op een preset (Elke 15 minuten, Doordeweeks om 9:00 uur, enz.) om een gangbare planning te laden, en pas daarna de velden aan tot het exact past. Elf presets dekken de patronen die je daadwerkelijk in productie gebruikt.
- 4
Verifieer de preview van de volgende run
Bekijk de vijf aankomende runtijden — wissel tussen Lokaal en UTC om te bevestigen dat de planning afgaat wanneer je het bedoelt. Dit is de betrouwbaarste manier om de POSIX dag-van-de-maand / dag-van-de-week OR-valkuil te vangen voordat hij je in productie bijt.
- 5
Kopieer en plak in je scheduler
Klik op Kopiëren om de uitdrukking op te halen. Plak in je crontab, systemd-timer, GitHub Actions
cron:, AWS EventBridge, Kubernetes CronJobscheduleof een andere cron-compatibele scheduler. Vergeet niet de tijdzone van de doel-scheduler te controleren — zie de sectie Aanbevolen aanpak hieronder.
Veelgemaakte cron-fouten
POSIX OR-val: beide dag-velden beperkt
Wanneer ZOWEL dag-van-de-maand ALS dag-van-de-week beperkt zijn, draait POSIX cron de job als ÉÉN van beide matcht — niet allebei. Dus 0 0 1 * 5 gaat af op de 1e van elke maand ÉN elke vrijdag, niet alleen op vrijdagen-die-op-de-1e-vallen. Gebruik * in één van de twee dag-velden wanneer je één conditie wilt, of schrijf een wrapper-script dat de AND-check uitvoert.
# Bedoeld: "eerste vrijdag van de maand" 0 0 1-7 * 5 # Werkelijk: gaat af op dag 1-7 van de maand ÓF elke vrijdag — beide condities
# Gebruik wrapper voor echte AND-semantiek 0 0 * * 5 [ $(date +\%d) -le 7 ] && /jouw-script # OF laat één conditie vallen en accepteer de ruimere planning
Tijdzonedrift tussen dev en prod
Cron-planningen op een Linux-server gebruiken de systeem-tijdzone, niet de lokale tijdzone van de schrijver. Een 9:00 uur cron op een server ingesteld op UTC gaat af om 4:00 's nachts in US-East. Ontwerp planningen altijd tegen de tijdzone van de doelserver — bij voorkeur UTC — en zet de tijdzone expliciet vast met CRON_TZ=... bovenaan de crontab.
# Geschreven door US East-dev, gedeployed op UTC-server 0 9 * * * /jouw-rapport.sh # Gaat af om 9:00 UTC = 4:00 US East — niet wat de dev bedoelde
# Zet tijdzone vast, of schrijf expliciet in UTC CRON_TZ=America/New_York 0 9 * * * /jouw-rapport.sh
Stap-operator verwarring: '*/15' versus '15'
*/15 in minuut betekent "elke 15 minuten vanaf 0" (dus 0, 15, 30, 45). Alleen 15 betekent "alleen op minuut 15" — één run per uur. Beginners schrijven vaak 15 in de veronderstelling dat dat elke 15 minuten is; de uitleg in begrijpelijke taal van de tool maakt de fout duidelijk vóór de deploy.
# Bedoeld: elke 15 minuten 15 * * * * # Werkelijk: één keer per uur, op minuut 15 (4 runs/uur minder dan bedoeld)
# Correct */15 * * * * # Elke 15 minuten: minuut 0, 15, 30, 45 van elk uur
Zes-veld uitdrukking op POSIX-scheduler
Quartz/Spring/node-cron ondersteunen een optioneel seconden-veld op de eerste positie. Linux crontab, GitHub Actions, AWS EventBridge (grotendeels) en Kubernetes CronJob doen dat NIET — die verwachten vijf velden. Een zes-veld uitdrukking plakken breekt de planning stilzwijgend: je seconden worden minuten, minuten worden uren, enz.
# Quartz 6-veld gekopieerd naar Linux crontab 0 0 9 * * 1-5 # Linux leest: minuut=0, uur=0, dom=9, maand=*, dow=1-5 # = middernacht op dag 9 in maanden die overeenkomen met doordeweekse dagen — chaos
# POSIX 5-veld, laat de seconden weg 0 9 * * 1-5 # = doordeweeks om 9:00 uur
Dag-van-de-maand buiten bereik voor de maand
Cron valideert dag-van-de-maand niet tegen de werkelijke maand. 0 0 31 2 * (31 februari) ontleedt prima maar matcht nooit — februari heeft hooguit 29 dagen. Beginners gaan ervan uit dat de parser dit opvangt; dat doet hij niet. De preview van de volgende run in deze tool toont "Geen geplande runs" wanneer een uitdrukking structureel geldig is maar logisch onmogelijk.
# 30 of 31 februari — draait nooit 0 0 30 2 * 0 0 31 2 * # Ontleedt maar er gaat geen planning ooit af
# Gebruik patroon 'laatste werkdag van februari' via script 0 0 28-29 2 * [ $(date -d tomorrow +\%m) = 03 ] && /jouw-script
Quartz-syntaxis aanzien voor POSIX
AWS-docs, Spring-tutorials en veel Stack Overflow-antwoorden tonen Quartz cron-uitdrukkingen met ?, L, W of #. Die werken niet in Linux crontab. Kopieer je een zes-veld uitdrukking met ? op de dag-van-de-week positie, dan wijst de Linux-parser hem af (of erger nog, ontleedt hem stilzwijgend verkeerd). Deze tool vangt Quartz-operatoren op en legt het verschil uit.
# Quartz: 'laatste vrijdag van de maand' — ongeldig in POSIX 0 0 ? * 6L *
# POSIX wrapper-script aanpak voor laatste-vrijdag 0 0 25-31 * 5 /jouw-script # Draait op vrijdag tussen de 25e en 31e van elke maand
Veelvoorkomende use cases
- Linux crontab-jobs
- Bouw en verifieer regels voor
/etc/crontab,/etc/cron.d/*of per-gebruikercrontab -ebestanden. Gebruik de preview van de volgende run om te bevestigen dat de planning op het juiste tijdstip valt in de geconfigureerde tijdzone van je server voordat je opslaat. - Kubernetes CronJob-planningen
- Genereer het
spec.scheduleveld voor een Kubernetes CronJob. Kubernetes 1.27+ ondersteunt ookspec.timeZone— gebruik de UTC-toggle om je planning in UTC te ontwerpen en zet daarnatimeZoneexpliciet om de lokale tijd van de worker-node te omzeilen. - GitHub Actions geplande workflows
- Bouw de
cron:regel onderon.schedule. GitHub Actions draait altijd in UTC — zet de preview op UTC om je planning te bevestigen. Vermijd intervallen korter dan 15 minuten; de scheduler van GitHub slaat korte-interval-jobs onder belasting over. - AWS EventBridge rules
- Stel de cron-uitdrukking samen voor een EventBridge geplande rule. Let op: AWS gebruikt Quartz-achtige zes-veld syntaxis met
?voor dag-van-de-week — deze tool produceert POSIX vijf-veld, die je moet omzetten door seconden (0) voorop te zetten en de*in één van de twee dag-velden te vervangen door?. - GitLab CI geplande pipelines
- Verifieer de cron-uitdrukking voor een geplande CI-pipeline in GitLab. GitLab gebruikt POSIX vijf-veld syntaxis — wat deze tool produceert — en een UI-datumkiezer, maar de cron-vorm geeft je fijnere controle voor niet-standaard intervallen.
- Cloudflare Workers Cron Triggers
- Bouw de
[triggers.crons]regel inwrangler.toml. Cloudflare gebruikt POSIX vijf-veld syntaxis. Minimum interval is één minuut; de worker draait in UTC. Gebruik de preview om te verifiëren dat de trigger binnen je verwachte venster afgaat. - Node.js node-cron planningen
- Bouw uitdrukkingen voor de
node-cronbibliotheek, die zowel vijf-veld POSIX als een optioneel voorafgaand seconden-veld ondersteunt. Houd het op vijf velden tenzij je specifiek sub-minute precisie nodig hebt — zes-veld uitdrukkingen porten niet naar Linux crontab. - Code review en documentatie
- Plak een cron-uitdrukking uit een PR of runbook om direct te zien wat hij doet — geen gokken meer bij
30 7 * * 1-5of het erbij pakken van een referentiekaart. De uitleg in begrijpelijke taal is ook geweldig voor inline-opmerkingen en README-bestanden.
Cron-syntaxis referentie
- Veldvolgorde: M U D M W
- Minuut (0-59), Uur (0-23), Dag-van-de-maand (1-31), Maand (1-12), Dag-van-de-week (0-6, waarbij 7 ook = zondag). Het dag-van-de-week veld accepteert zowel numerieke (0-6) als benoemde (SUN-SAT, hoofdletterongevoelig) tokens.
- Operatoren
*= elke waarde;,= lijstscheider (1,3,5);-= bereik (1-5);/= stap (*/15,5/10); namen: JAN-DEC voor maand, SUN-SAT voor dag-van-de-week (hoofdletterongevoelig).- Macro's (aliassen)
@yearly=0 0 1 1 *;@annually=0 0 1 1 *;@monthly=0 0 1 * *;@weekly=0 0 * * 0;@daily=0 0 * * *;@midnight=0 0 * * *;@hourly=0 * * * *.@rebootis een speciaal non-schedule (draait alleen bij boot) en wordt afgewezen met een toelichtende fout.- POSIX dag-semantiek (OR-regel)
- Wanneer ZOWEL dag-van-de-maand ALS dag-van-de-week beperkt zijn (geen van beide is
*), draait de planning wanneer ÉÉN van beide matcht — OR-semantiek. Als slechts één beperkt is, beslist die. Zijn beide*, dan matcht elke dag. Deze OR-regel geldt voor vixie cron, BSD cron en de meeste POSIX-implementaties; Quartz gebruikt?om AND versus OR te disambigueren. - Zes-veld modus (Quartz-Lite)
- Heeft je invoer zes door spaties gescheiden tokens, dan behandelt de tool de eerste als seconden-veld (0-59). Handig voor Quartz, Spring
@Scheduled(cron=...)en node-cron. NIET portable naar Linux crontab of POSIX-schedulers — die zouden je seconden als minuten interpreteren en alles één positie opschuiven. - Verankering van de stap-operator
*/Nis verankerd aan de laagste waarde van het veld:*/15in minuut =0,15,30,45, niet "elke 15 vanaf nu". Met een niet-wildcard basis:5/15in minuut =5,20,35,50. Stap-waarden die het veldbereik niet gelijkmatig delen slaan er bij de wraparound één over — dat is correct, geen bug.- Validatiegrenzen
- minuut ∈ [0,59], uur ∈ [0,23], dag-van-de-maand ∈ [1,31], maand ∈ [1,12], dag-van-de-week ∈ [0,7]. Waarden buiten bereik produceren een fout op veldniveau. De dag-van-de-maand wordt NIET gevalideerd tegen de maand (
0 0 31 2 *ontleedt prima maar matcht nooit, want februari heeft geen dag 31 — de preview van de volgende run toont "Geen geplande runs"). - Quartz-operatoren afgewezen
- POSIX cron ondersteunt niet de Quartz-operatoren
?(geen specifieke waarde),L(laatste),W(dichtstbijzijnde werkdag) of#(n-de weekdag). Deze tool wijst ze af met een duidelijke melding "Quartz-operatoren niet ondersteund" in plaats van ze stilzwijgend te ontleden als ongeldige POSIX. Voor Quartz-planningen gebruik je een Quartz-bewuste tool of de Spring scheduler. - Jaar-cap op zoektocht naar volgende run
- De berekening van de volgende run zoekt tot 4 jaar vooruit; uitdrukkingen die minder vaak matchen (bijv. "29 feb" patronen) tonen "Geen geplande runs binnen de komende 4 jaar". Dit is bewust om onbegrensde iteratie op onmogelijke patronen te voorkomen.
Aanbevolen aanpak voor cron-planningen
- Gebruik UTC op servers, converteer pas bij weergave
- Zet je servers op UTC (
/etc/timezoneofTZ=UTC) en schrijf alle cron-uitdrukkingen in UTC. Converteer pas naar lokale tijd op het moment van weergave in je dashboards en rapporten. Dit elimineert een hele categorie tijdzone-bugs die het hardst toeslaan bij zomertijd-overgangen, wanneer lokale-tijd planningen stilzwijgend dubbel afgaan of een run overslaan. Gebruik de UTC-toggle in deze tool om je planning vanaf het begin in UTC te ontwerpen. - Vermijd de POSIX dag-van-de-maand/dag-van-de-week OR-val
- Beperk nooit zowel dag-van-de-maand ALS dag-van-de-week tenzij je OR-semantiek wilt. Wil je "elke maandag in januari", schrijf dan
0 0 * 1 1(dag-van-de-maand is*); wil je "de 1e van elke maand", schrijf dan0 0 1 * *(dag-van-de-week is*). De POSIX OR-regel betekent dat0 0 1 * 1draait op de 1e ÉN elke maandag — vrijwel zeker niet wat je bedoelde. De preview van de volgende run vangt dit op als je vóór deploy checkt. - Zet de tijdzone van de planning expliciet vast
- Moderne schedulers ondersteunen het vastpinnen van de tijdzone in de planningsdefinitie:
CRON_TZ=America/New_Yorkbovenaan een crontab (vixie cron 3.0+),spec.timeZone: "America/New_York"voor Kubernetes CronJobs 1.27+, schedule expression metScheduleExpressionTimezonevoor AWS EventBridge Scheduler. Zet de tijdzone expliciet vast in plaats van te leunen op de default van de server — server-tijdzones kunnen zonder waarschuwing veranderen tijdens infrastructuurmigraties. - Spreid belasting over de minuten, niet op :00
- Vermijd
0 * * * *(elk uur op minuut 0) voor niet-kritieke jobs — op schaal levert veel dingen plannen op exact :00 belastingspieken op. Kies een willekeurige minuut-offset (23 * * * *,41 * * * *) voor elke job om de belasting te spreiden. Hetzelfde geldt voor dagelijkse jobs:30 3 * * *is vriendelijker voor je database dan0 3 * * *wanneer veel jobs samenkomen om 3:00. - Maak jobs idempotent
- Cron heeft geen ingebouwde retry, geen overlap-preventie, geen herstel van gemiste runs. Je job moet veilig meerdere keren uit te voeren zijn (idempotent) en zichzelf controleren. In plaats van "verstuur rapport om 9:00 uur" ontwerp je hem als "verstuur het rapport van vandaag als dat nog niet is verzonden" — zo herstelt hij vanzelf na downtime, per ongeluk dubbele planningen en gelijktijdige runs. Idempotentie is een eigenschap van de job, niet van de scheduler, en het is de allerbelangrijkste betrouwbaarheidspraktijk.
- Voeg een heartbeat toe voor kritieke planningen
- De stille-storing-modus van cron is zijn grootste zwakte — als de planning niet afgaat, krijg je nergens een signaal. Voor kritieke jobs laat je de job aan het einde van elke run een heartbeat-service pingen (Healthchecks.io, Cronitor, Dead Man's Snitch); de service alarmeert je als de verwachte ping uitblijft. Zo vang je zowel een falende job als een misvurende planning op. De gratis tier dekt de meeste persoonlijke en small-team behoeften.
- Verifieer met de preview van de volgende run voor je ship
- Voordat je een nieuwe cron-planning deployt, bekijk je de vijf aankomende runtijden in de preview van deze tool. Wissel tussen Lokaal en UTC. Bevestig dat de planning valt waar je het bedoelt — niet vijf minuten te vroeg, niet op de verkeerde dag, niet over het weekend heen dat je belangrijk vond. De preview is de goedkoopst mogelijke productietest.
Veelgestelde vragen
Wat doet deze tool?
Wat is een cron-uitdrukking?
1,3,5), een bereik (1-5), een wildcard (* = elke) of een stap (*/15 = elke 15). De combinatie van alle vijf velden definieert exact wanneer het geplande commando moet draaien. Cron is ontstaan in Unix V7 (1979) en blijft de facto de taal voor tijdgebaseerde job-planning op Linux/Unix, in container-orkestratie (Kubernetes CronJobs), in CI/CD (GitHub Actions, GitLab CI) en in serverless platforms (AWS EventBridge, Cloudflare Workers Cron Triggers). Ondanks de vele alternatieven die in de loop der decennia zijn voorgesteld, heeft niets de bondige, expressieve vijf-veld grammatica van cron weten te verdringen. Wordt mijn data ergens geüpload?
Wat is het verschil tussen POSIX cron en Quartz?
? (geen specifieke waarde, gebruikt wanneer dag-van-de-maand en dag-van-de-week botsen), L (last — laatste dag van de maand, laatste vrijdag, enz.), W (dichtstbijzijnde werkdag) en # (n-de weekdag van de maand, bijv. 2#1 = eerste dinsdag). Deze tool implementeert POSIX cron omdat die veel breder gebruikt wordt; Quartz-operatoren worden gemeld als syntaxisfouten met een duidelijke melding "Quartz-operatoren niet ondersteund". Heb je Quartz nodig, dan zijn populaire Java-schedulers zoals Quartz Scheduler en Spring's @Scheduled je doel — maar de planningsdefinities zijn niet direct portable naar Linux cron. Waarom draait '0 0 1 * 5' op elke vrijdag ÉN op de 1e?
*), draait cron de job als ÉÉN van beide condities matcht — niet allebei. Dus 0 0 1 * 5 (dag-van-de-maand=1, dag-van-de-week=5) gaat af op de 1e van elke maand ÉN elke vrijdag, niet alleen op vrijdagen die toevallig op de 1e vallen. Wil je alleen dat laatste (AND-semantiek — vrijdag-de-1e), dan kun je dat in standaard cron niet uitdrukken; je hebt een script nodig dat elke vrijdag ÓF op de 1e draait en vroegtijdig stopt op basis van de daadwerkelijke datum. Vixie cron (de GNU/Linux-standaard), BSD cron en AWS EventBridge volgen allemaal deze OR-regel. De preview van de volgende run in deze tool maakt de werkelijke planning duidelijk — plak verdachte uitdrukkingen en verifieer voordat je deployt. Hoe draai ik een job elke 30 seconden?
* * * * * en * * * * * met sleep 30 && ervoor — primitief maar werkt voor vixie cron. (2) Gebruik een scheduler met secondenondersteuning zoals Quartz, een Kubernetes CronJob met een eigen controller, of systemd-timers met OnCalendar: *-*-* *:*:00/30. (3) Draai een long-lived daemon die 30 seconden tussen iteraties slaapt — voor de meeste monitoring-behoeften het juiste antwoord. (4) Stap over op een event-driven trigger (webhook, message queue) als je daadwerkelijk realtime respons nodig hebt. Het 30-seconden-cron-patroon is bijna altijd een teken dat cron de verkeerde abstractie is. Welke tijdzone gebruikt cron?
/etc/timezone of de TZ environment-variabele. Dit is een veelvoorkomende bron van bugs: een 9:00 uur cron op een server in US-East gaat af om 14:00 UTC, maar op een server ingesteld op UTC gaat hij af om 09:00 UTC (oftewel 4:00 's nachts in US-East). De oplossing is óf je servers altijd op UTC zetten en alle cron-uitdrukkingen in UTC schrijven, óf de variabele CRON_TZ=America/New_York bovenaan de crontab plaatsen om de tijdzone expliciet vast te zetten (ondersteund door vixie cron 3.0+). Managed schedulers variëren: GitHub Actions draait altijd in UTC, AWS EventBridge ondersteunt tijdzone in de planningsdefinitie, Kubernetes CronJob heeft sinds 1.27 een spec.timeZone veld. Met de UTC/Lokaal-toggle van deze tool bekijk je de planning in beide tijdzones — wissel ertussen om te bevestigen dat de run valt waar je het bedoelde. Waar wordt '*/15' precies naar uitgebreid?
*/N betekent "elke N vanaf de laagste geldige waarde van het veld". Voor minuut (bereik 0-59) breidt */15 uit naar 0,15,30,45 — vier runs per uur op de kwartieren. De stap is NIET "elke 15 minuten vanaf nu"; hij is verankerd aan de startwaarde van het veld. Zelfde logica voor andere velden: */2 in uur betekent 0,2,4,...,22 (12 runs); */3 in dag-van-de-maand betekent 1,4,7,...,31 (11 runs). Voor stap-bases die geen wildcard zijn (bijv. 5/15) gaat de uitbreiding uit van de basis: 5/15 in minuut = 5,20,35,50. Stap-waarden die het bereik niet gelijkmatig delen slaan er bij de wraparound één over — dat is correct cron-gedrag, geen bug. De preview van de volgende run maakt de werkelijke planning inzichtelijk. Kan ik een zes-veld uitdrukking met seconden gebruiken?
@Scheduled(cron=...) of Node.js-bibliotheken zoals node-cron aanstuurt die seconden ondersteunen. Voor standaard POSIX-schedulers (Linux crontab, GitHub Actions, AWS EventBridge, Kubernetes CronJob) houd je het op vijf velden — een voorafgaand seconden-veld toevoegen breekt de planning stilzwijgend (de scheduler interpreteert je minuut als seconden, je uur als minuut, enz., waardoor alles één positie opschuift). Bij twijfel: check de docs van je doel-scheduler; als die niet expliciet zegt "zes-veld met seconden is ondersteund", gebruik dan vijf velden. Wat is het grootste interval dat cron kan uitdrukken?
0 0 D M * (bijv. 0 0 1 1 * = elke 1 januari om middernacht). Voor "elke twee jaar" of langere intervallen is cron alleen niet genoeg — dan heb je een externe datumcheck nodig bovenaan je script (bijv. [ $(($(date +%Y) % 2)) -eq 0 ] && /jouw-commando om op even jaren te draaien). Voor "elke 90 dagen" of andere niet-uitgelijnde meerdaagse intervallen faalt cron ook: er is geen ingebouwde modulo-dag-operator, dus je schrijft een wrapper die de dag-van-het-jaar tegen een referentiedatum checkt. Zijn je planningsbehoeften zo complex, overweeg dan een echte workflow-scheduler (Airflow, Temporal, AWS Step Functions) — de grammatica van cron is bewust simpel en breekt voor alles wat verder gaat dan reguliere wekelijkse/maandelijkse patronen. Hoe ga ik om met gemiste runs na downtime?
anacron (of systemd-cron met Persistent=true), die gemiste jobs na boot inhaalt, geschikt voor laptops en intermitterende systemen. (2) Stap over op een scheduler met ingebouwde retry: Kubernetes CronJobs hebben startingDeadlineSeconds (draaien als de vertraging binnen de deadline valt) en concurrencyPolicy (voorkomt overlappende runs); AWS EventBridge ondersteunt retry-policies. (3) Bouw idempotentie in de job zelf in: in plaats van "verstuur rapport om 9:00 uur", laat de job vragen "is het rapport van vandaag al gegenereerd?" en hem alleen produceren als dat niet zo is — dit zelf-heelt na elke duur van downtime. Optie 3 is het meest robuust en werkt met elke scheduler. Waarom draait mijn GitHub Actions cron niet op tijd?
Gerelateerde tools
Alle tools bekijken →Unix timestamp omrekenen — online converter
Datum en tijd
Reken Unix timestamps direct om naar datums. Herkent automatisch seconden, milliseconden en microseconden. Live klok, bidirectioneel. Gratis en privé.
AES-ontsleutelingstool — OpenSSL- & CryptoJS-compatibel
Beveiligingstools
Ontsleutel AES online — GCM/CBC/CTR, wachtwoordzin of ruwe sleutel, detecteert automatisch het OpenSSL- & CryptoJS-formaat "U2FsdGVkX1". 100% in de browser, sleutels verlaten de pagina nooit.
AES-versleutelingstool — GCM, CBC & CTR
Beveiligingstools
Gratis AES-versleuteling online — AES-128/192/256, GCM/CBC/CTR, wachtwoordzin (PBKDF2) of ruwe sleutel. Draait 100% in je browser; niets wordt geüpload.
Talstelsel omrekenen — online converter
Omrekentools
Reken je getal direct om tussen binair, hex, decimaal, octaal en elk talstelsel (2-36). Gratis en privé — alles draait in je browser.
Base64 decoderen en encoderen online
Encodering en formattering
Base64 decoderen en encoderen direct in je browser. Realtime conversie met volledige UTF-8- en emoji-ondersteuning. 100% privé — geen account nodig.
Base64 naar afbeelding converter
Encodering en formattering
Decodeer een Base64-string of data-URI terug naar een afbeelding in je browser. Bekijk voorbeeld, lees afmetingen & MIME, download als PNG, JPG, GIF, SVG. Geen upload.