ToolSec

⚙️ DevOps Utilities

Cron Syntax Cheat Sheet: How to Read Cron Expressions

· 6 min read · Updated June 27, 2026

Cron expressions are dense but logical. Once you know what the five fields and four special characters mean, you can read — and write — almost any schedule. Here's the cheat sheet.

The five fields

A standard cron line has five space-separated fields, always in this order:

┌───────────── minute (0–59)
│ ┌─────────── hour (0–23)
│ │ ┌───────── day of month (1–31)
│ │ │ ┌─────── month (1–12)
│ │ │ │ ┌───── day of week (0–7, 0 and 7 = Sunday)
│ │ │ │ │
* * * * *  command

The four special characters

  • * — every value. * * * * * runs every minute.
  • , — a list. 0 8,12,18 * * * runs at 8am, noon and 6pm.
  • - — a range. 0 9-17 * * * runs hourly from 9am to 5pm.
  • / — a step. */15 * * * * runs every 15 minutes.

You can combine them: 0-30/10 means 0, 10, 20, 30. The pieces apply independently per field, which is what makes cron so expressive.

Common schedules

  • */5 * * * * — every 5 minutes.
  • 0 * * * * — every hour, on the hour.
  • 0 0 * * * — every day at midnight.
  • 0 9 * * 1-5 — 9am on weekdays.
  • 30 2 * * 0 — 2:30am every Sunday.
  • 0 0 1 * * — midnight on the 1st of each month.
  • 0 0 1 1 * — midnight on January 1st.

Macros (shorthand)

Many cron implementations accept named shortcuts: @hourly, @daily (midnight), @weekly (Sunday midnight), @monthly and @yearly. They're easier to read than the five-field equivalents and mean exactly the same thing.

The day-of-month / day-of-week gotcha

This trips up almost everyone. When both the day-of-month and day-of-week fields are restricted (neither is *), cron runs when either matches — not both. So 0 0 13 * 5 fires on the 13th of every month and on every Friday, not only on Friday the 13th. If you need a specific weekday-and-date combination, you generally add a check inside the job itself.

Timezones

Cron runs in the server's timezone, which is often UTC. A job scheduled for 0 9 * * * fires at 9am server time, which may not be 9am where you are. Always confirm the server's timezone before relying on a schedule.

Test before you trust

The safest way to verify a cron line is to see its next run times. Paste any expression into our cron explainer for a plain-English breakdown and the next five fire times in your local timezone. If your job reads timestamps, the Unix timestamp converter pairs nicely.

Frequently asked questions

What do the five cron fields mean?

In order: minute (0–59), hour (0–23), day of month (1–31), month (1–12), and day of week (0–7, where 0 and 7 both mean Sunday).

What does */15 mean in cron?

The /15 step in the minute field means 'every 15 minutes' — it fires at minute 0, 15, 30 and 45 of every hour.

Why does my cron job with a day and weekday run too often?

When both the day-of-month and day-of-week fields are set, cron runs when either matches, not both. To target a specific date-and-weekday, add a condition inside the job.

Try the related tools

Related guides