Skip to content

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.

Geen tracking Draait in je browser Gratis
Alle ontleding en berekening van de volgende run gebeurt lokaal in je browser. Er wordt geen data naar een server gestuurd.

Velden
Presets

In begrijpelijke taal

Volgende 5 geplande runs

Tijdzone voor preview van volgende run
    Gecontroleerd op POSIX 5-veld compliance, correctheid van OR-semantiek, verankering van stap-operator, uitbreiding van benoemde tokens en afwijzing van Quartz-operatoren met behulpzame foutmeldingen — Go Tools Engineering Team · May 20, 2026

    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 POSIX

    De 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 POSIX

    Standaard 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 cron

    Alternatief 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 velden

    Voegt 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-veld

    POSIX 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 POSIX

    Draait 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. 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. 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, `*/N` voor stappen, `a-b` voor bereiken en `1,3,5` voor lijsten.

    3. 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. 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. 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 CronJob `schedule` of 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.

    ✗ Fout
    # 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
    ✓ Correct
    # 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.

    ✗ Fout
    # 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
    ✓ Correct
    # 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.

    ✗ Fout
    # Bedoeld: elke 15 minuten
    15 * * * *
    # Werkelijk: één keer per uur, op minuut 15 (4 runs/uur minder dan bedoeld)
    ✓ Correct
    # 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.

    ✗ Fout
    # 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
    ✓ Correct
    # 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.

    ✗ Fout
    # 30 of 31 februari — draait nooit
    0 0 30 2 *
    0 0 31 2 *
    # Ontleedt maar er gaat geen planning ooit af
    ✓ Correct
    # 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.

    ✗ Fout
    # Quartz: 'laatste vrijdag van de maand' — ongeldig in POSIX
    0 0 ? * 6L *
    ✓ Correct
    # 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-gebruiker `crontab -e` bestanden. 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.schedule` veld voor een Kubernetes CronJob. Kubernetes 1.27+ ondersteunt ook `spec.timeZone` — gebruik de UTC-toggle om je planning in UTC te ontwerpen en zet daarna `timeZone` expliciet om de lokale tijd van de worker-node te omzeilen.
    GitHub Actions geplande workflows
    Bouw de `cron:` regel onder `on.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 in `wrangler.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-cron` bibliotheek, 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-5` of 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 * * * *`. `@reboot` is 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
    `*/N` is verankerd aan de laagste waarde van het veld: `*/15` in minuut = `0,15,30,45`, niet "elke 15 vanaf nu". Met een niet-wildcard basis: `5/15` in 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/timezone` of `TZ=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 dan `0 0 1 * *` (dag-van-de-week is `*`). De POSIX OR-regel betekent dat `0 0 1 * 1` draait 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_York` bovenaan een crontab (vixie cron 3.0+), `spec.timeZone: "America/New_York"` voor Kubernetes CronJobs 1.27+, schedule expression met `ScheduleExpressionTimezone` voor 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 dan `0 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?
    Hij ontleedt, valideert en legt cron-uitdrukkingen uit in je browser, met een live preview van de eerstvolgende vijf geplande runs in je tijdzone of UTC. Typ een standaard POSIX vijf-veld cron-uitdrukking — of gebruik de presets en de invoervelden per positie om er een te bouwen zonder de syntaxis uit je hoofd te kennen — en de tool produceert een beschrijving in begrijpelijk Nederlands ("Elke 15 minuten", "Doordeweeks om 9:00 uur", enz.) plus de daadwerkelijke datums en tijden waarop de job zal afgaan. Onjuiste uitdrukkingen worden direct opgevangen met een foutmelding op veldniveau, zodat je geen deploy verspilt aan een kapotte planning. De hele tool draait 100% client-side: niets wordt geüpload, gelogd of opgeslagen — veilig voor productie-crontabs en interne planningen met gevoelige timingpatronen.
    Wat is een cron-uitdrukking?
    Een cron-uitdrukking is een vijf-veld string die een terugkerende planning definieert. De velden zijn 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 (`*` = 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?
    Nee. Alle ontleding, validatie en berekening van de volgende run draait 100% client-side in je browser met JavaScript. Je uitdrukkingen worden nooit verzonden, nooit opgeslagen op een server, nooit gelogd en nooit geanalyseerd. Daardoor is de tool veilig voor productie-crontabs, interne planningspatronen die infrastructuur-timing prijsgeven, en alle gevoelige planningen. Je kunt dit verifiëren in het Netwerk-tabblad van je browser — een cron-uitdrukking typen leidt tot nul netwerkverzoeken. De tool gebruikt geen cookies voor invoer en geen externe analytics die opvangen wat je typt.
    Wat is het verschil tussen POSIX cron en Quartz?
    POSIX cron is de vijf-veld standaard die wordt gebruikt door Unix/Linux crontab, systemd-timers, GitHub Actions, GitLab CI, AWS EventBridge, Kubernetes CronJobs en de meeste schedulers. Quartz is een Java planningsbibliotheek die een seconden-veld toevoegt (zes of zeven velden totaal) plus extra operatoren: `?` (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?
    Dit is de dag-van-de-maand / dag-van-de-week OR-semantiek van POSIX cron, en het is de meest voorkomende cron-verrassing. De regel: wanneer BEIDE velden beperkt zijn (geen van beide is `*`), 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?
    Dat kan niet met standaard POSIX cron. De kleinste granulariteit van cron is één minuut — het kleinste veld is minuut (0-59). Voor sub-minute planningen heb je deze opties: (1) Draai twee jobs op `* * * * *` 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?
    Op een Linux-server gebruikt vixie cron de systeem-tijdzone — meestal ingesteld via `/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?
    De stap-operator `*/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?
    Zes-veld uitdrukkingen met een voorafgaand seconden-veld (bereik 0-59) zijn een Quartz/Spring/Cron4j-uitbreiding, geen POSIX. Deze tool accepteert zes-veld uitdrukkingen wanneer de invoer precies zes door spaties gescheiden tokens heeft — handig als je Quartz, Spring `@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?
    Zonder externe state kan cron betrouwbaar tot eens per jaar uitdrukken met `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?
    Standaard cron kent geen herstel — als het systeem down was op het geplande moment, wordt de run simpelweg overgeslagen. Er is geen log van "deze hebben we gemist". Voor kritieke jobs heb je drie opties: (1) Gebruik `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?
    GitHub Actions schedules zijn best-effort: ze kunnen tot meerdere minuten te laat afgaan bij hoge belasting op de infrastructuur van GitHub, en bij zeer hoge belasting kunnen ze volledig worden overgeslagen (vooral bij korte intervallen zoals elke vijf minuten). Dezelfde disclaimer geldt voor de meeste managed schedulers — ze ruilen exacte timing in voor schaal en betrouwbaarheid. Praktische implicaties: (1) Plan geen dingen die op een exacte seconde moeten draaien; cron is voor "ongeveer op deze tijd, dagelijks". (2) Voor korte intervallen geef je de voorkeur aan een long-lived worker boven een geplande job. (3) Voor exacte financiële of compliance-deadlines gebruik je een dedicated cron-daemon op een server die je zelf beheert, of een striktere scheduler zoals AWS EventBridge Scheduler met de Standard schedule. (4) Specifiek voor GitHub Actions: vermijd intervallen korter dan 15 minuten; de scheduler slaat ze onder belasting vaak over.

    Gerelateerde tools

    Alle tools bekijken →