DevKit Tools

Cron Expressions Explained: Read Any Schedule in Seconds

3 min read4 October 2026By Muhammad Abdullah

A cron expression is five short fields that describe when a job should run. They schedule backups, reports, cleanups and CI jobs everywhere, from Linux servers to GitHub Actions and cloud platforms. They look cryptic, but every expression is read the same way, and once you know the order you can read any of them.

Try it as you readCron Expression Builder and ParserDecode a cron expression into plain English and see the exact next times it will run, with ready made GitHub Actions and crontab output.

The five fields

text
* * * * *
| | | | day of week    0 to 6 (Sunday is 0, and 7 also works)
| | | month          1 to 12
| | day of month     1 to 31
| hour               0 to 23
minute               0 to 59
  • * means every value.
  • , lists values: 1,15 is the 1st and the 15th.
  • - is a range: 1-5 is Monday to Friday in the day-of-week field.
  • / is a step: */15 in the minute field is every 15 minutes.

Common schedules

text
*/5 * * * *      every 5 minutes
0 * * * *        at the start of every hour
0 9 * * 1-5      9:00 on weekdays
30 2 * * *       2:30 every night
0 0 1 * *        midnight on the 1st of every month
0 */6 * * *      every 6 hours, on the hour

The day trap

When both day of month and day of week are set, classic cron runs the job when either one matches, not when both do. So 0 9 13 * 5 runs on every 13th and on every Friday, not only on Friday the 13th. If you need both conditions, run on one and check the other inside the script.

Why it ran at the wrong time

Cron uses the clock of whatever runs it, and most servers, containers and cloud schedulers run on UTC. GitHub Actions schedules are always UTC. A job written as 0 9 * * * by someone in Pakistan, which is UTC plus 5, runs at 2 pm local time.

  • Convert the local time you want into UTC and write that, or use the scheduler's timezone setting if it has one.
  • Remember daylight saving: a UTC schedule moves by an hour in local time twice a year in countries that change their clocks.
  • Avoid scheduling at the exact times clocks change, roughly 1 am to 3 am local time in many regions, where a job can be skipped or run twice.

Variations to watch for

  • Some systems, such as Quartz in Java, add a seconds field at the start, so expressions have six or seven fields.
  • Many platforms accept shortcuts like @daily and @hourly.
  • Hosted schedulers often have a minimum interval. GitHub Actions runs at most every 5 minutes, and runs can start late when the service is busy.

Common questions

How do I run a cron job every 5 minutes?

Use */5 * * * *. The step in the minute field runs it at minute 0, 5, 10 and so on of every hour.

What timezone does cron use?

The timezone of the system running it, which on most servers and cloud schedulers, including GitHub Actions, is UTC.

Why did my cron job run every minute?

The minute field was left as *. Set it to a number, such as 0 9 * * * for once at 9:00.

Tools from this guide

More guides