Cron & scheduling

Cron Expression Generator & Decoder

Decode any cron expression into plain English, or build a crontab schedule with simple dropdowns — and preview the next five run times instantly. No sign-up, runs entirely in your browser.

How to read a cron expression

A standard cron expression has five fields separated by spaces: minute (0–59), hour (0–23), day of month (1–31), month (1–12), and day of week (0–6, where 0 is Sunday). Each field accepts a single value, a list (1,15), a range (1-5), a step (*/5), or an asterisk (*) meaning 'every'.

For example, 0 3 * * 0 means 'at 03:00, only on Sunday', while */15 * * * * means 'every 15 minutes'. Paste any expression above and this decoder turns it into a sentence and shows exactly when it will next fire.

Building a crontab schedule that actually runs

Getting the fields right is only half the job. A crontab line runs in the server's timezone, so a schedule that looks correct locally can fire hours off in production. This generator previews the next five runs in UTC so you can sanity-check the timing before you commit it.

Once your job is scheduled, the harder problem is knowing whether it actually ran. Cron writes to a log almost nobody reads, and a failed backup or an expired-certificate renewal fails silently. That's the gap Narvin's heartbeat monitoring closes.

What do the five fields in a cron expression mean?

In order, they are minute, hour, day of month, month, and day of week. An asterisk (*) means every value, a slash defines a step (*/5 is every fifth), a hyphen a range (1-5), and a comma a list (1,15,30). The day-of-week field uses 0–6 with 0 as Sunday.

How do I decode a cron expression into plain English?

Switch to the Decode tab, paste your expression (for example 0 3 * * 0), and the tool instantly describes it in plain language and lists the next five times it will run.

Why does my cron job run at the wrong time?

Almost always a timezone mismatch: cron uses the server's local timezone, not yours. This tool previews upcoming runs in UTC so you can compare against your server's clock. If they differ, set the server timezone or shift the hour field accordingly.

How do I know if a scheduled cron job actually ran?

Cron won't tell you when a job silently fails. Add a Narvin Heartbeat ping to the end of your script: if the expected run doesn't check in on time, Narvin alerts you on Slack, email, and more — turning a silent failure into an immediate notification.

Put every site you answer for under watch.

First monitor live in under a minute. No credit card, 5 monitors free, forever.

Start monitoring free