Naar inhoud springen

Cron expression translator
crontab line, plain English.

Paste the five fields exactly as they stand in the crontab. The translator reads them back as one English sentence, decodes every field, and lists the next ten runs so you can check the schedule as dates — all in your browser.

The decode order

Any cron line, in three moves.

Crontab lines are written once and inherited forever. This is the reading order that makes an unfamiliar one fall apart:

1 · Count the fields

Five space-separated fields is crontab. Six or seven means Quartz or another seconds-first scheduler — a different language that happens to look alike. Everything after the fifth field is the command, not the schedule.

5 = cron · 6+ = not cron

2 · Read the last two first

Day-of-month and day-of-week decide which days. If both carry numbers, stop right there: cron fires when either matches — the OR rule, and the classic misreading.

both set → OR, not AND

3 · Then the first two

Minute and hour are what time on those days. A star in the minute slot means 60 runs an hour. The month field only matters when it isn’t a star.

* in minute = 60×/hour
Worked example

A crontab you’ve never seen.

The output of crontab -l on a box you just inherited, decoded line by line. Translate any of them — the button loads it into the reader above.

# m h dom mon dow command
*/5 * * * *   /usr/local/bin/health-ping.sh
30 3 * * *    /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
0 9 * * 1-5   /usr/local/bin/daily-digest.sh
0 6 1 * *     /usr/local/bin/invoice-run.sh
*/5 * * * *a health ping every 5 minutes, around the clock — 288 runs a day
30 3 * * *the nightly backup at 03:30 — note it’s the only line whose output goes to a log
0 9 * * 1-5the digest at 09:00, weekdays only — 1-5 in the last field is Monday–Friday
0 6 1 * *invoicing on the 1st of the month at 06:00 — a 1 in the middle field is a date, not a weekday
Reading direction

Decode the punctuation, not just the numbers

Each symbol is a compression, and unpacking them wrong is how a schedule gets misread in review:

  • Steps count from the field’s minimum. */6 in the hour field is 00, 06, 12, 18 — not “six hours after whenever it last ran”.
  • Numbers in both day fields mean OR, not AND. Cron fires when either one matches, so the schedule is wider than it looks.
  • Names and nicknames are dialect. MON and @daily read fine here and in most crons — numbers are the spelling every cron accepts.
See the OR rule demonstrated live

The symbols, read back

what each one unpacks to
*anything — in the minute field, that’s 60 firings an hourmatch all
*/6every 6th value, counted from the field’s minimuma step
9-17a span, both ends includeda range
1,15exactly these values, nothing betweena list
MON · JAN3-letter names some crons accept — this page reads them, numbers travel betterread here
@dailya nickname for 0 0 * * * — expanded here so you see what it hidesexpanded
L # ? WQuartz (Jenkins, Spring) — a crontab refuses the whole linenot cron
Canonical form

One schedule, four spellings.

All four lines below are Sunday at midnight. The translator reads each back to the same sentence — and the same next-run list, which is the proof that matters.

Numbers — the spelling every cron accepts0 0 * * 0
The nickname@weekly
The day name0 0 * * SUN
7 is Sunday too — both ends of the week wrap0 0 * * 7
Common expressions

The schedules you’ll meet most.

Each one is decoded already, and links to its full page — next runs, variants, and the crontab line ready to copy. The whole set lives in the cron examples library.

Cron job every minute* * * * *
Cron job every 5 minutes*/5 * * * *
Cron job every 15 minutes*/15 * * * *
Cron job every 30 minutes*/30 * * * *
Cron job every hour0 * * * *
Cron job every 6 hours0 */6 * * *
Cron job every day at midnight0 0 * * *
Cron job every weekday0 0 * * 1-5
Cron job every Sunday0 0 * * 0
Cron job monthly0 0 1 * *
Cron job every quarter0 0 1 */3 *
Cron job yearly0 0 1 1 *
FAQ

Cron expressions people paste most

Every minute of every hour, every day — 1,440 runs a day, 525,600 a year. All five fields are wildcards, so nothing is restricted. It’s the right schedule for a cheap health ping and the wrong one for almost anything else. Inherited in front of an expensive script, it’s the first line to question.

Every 5th value of that field, counted from its minimum. In the minute field, */5 fires at :00, :05, :10 … :55 — 12 times an hour, on the clock marks. It does not mean “5 minutes after the last run”: cron matches clock values. So */7 gives you :00, :07 … :56 and then :00 again — a 4-minute gap at the top of every hour.

Every day at midnight, server time — minute 0 of hour 0, any date, any month, any weekday. It’s the exact schedule @daily abbreviates. “Midnight” is the server’s midnight, and on DST changeover nights a local-time server can skip or repeat it.

Identical. The nicknames map exactly: @hourly = 0 * * * *, @daily and @midnight = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly = 0 0 1 1 *. The odd one out is @reboot — it isn’t a schedule at all, it fires when the cron daemon starts. This translator expands the nicknames so you always see the five fields underneath.

Because it isn’t from a crontab. Quartz (Jenkins, Spring), some cloud schedulers and a few cron libraries put a seconds field first, making six — or seven with a trailing year. A crontab won’t install it. If the seconds field is 0, drop it and the remaining five usually read as POSIX. If it’s anything else, the schedule fires sub-minute, and plain cron cannot say that at all.

It’s Quartz for “no specific value”. Quartz requires exactly one of the two day fields to stand down, so one of them gets a question mark. POSIX cron has no such rule and no ? — a plain * does the job. When both day fields are restricted, cron runs on the union of the two. Paste a ? into a crontab and the line is rejected.

Paste the expression above. The result view lists the next ten runs as concrete dates, computed by a real parser in your browser’s timezone. The crontab itself executes on the server’s clock: if the box runs UTC and you don’t, the whole list shifts by your offset. Nothing tells you a run succeeded, though — cron only ever logs that it started.

Gratis tools zijn pas het begin.
Uptimia houdt uw sites gezond.

Uptime, SSL, Vervaldatum domein, paginasnelheid, transacties — gemonitord vanuit 171+ locaties wereldwijd. 30 dagen gratis.

30 dagen gratis geen kaart Altijd opzegbaar gratis plan na de proefperiode
100.000+ gemonitorde websites · AVG-conform