Cron expression explainer

Parse any cron expression. Get the plain-English meaning, field breakdown, and next scheduled run times.


At 5:00 PM
0
minute
17
hour
*
day (month)
*
month
*
day (week)

Next 5 runs

#1Thu, 16 Apr 2026, 17:00
#2Fri, 17 Apr 2026, 17:00
#3Sat, 18 Apr 2026, 17:00
#4Sun, 19 Apr 2026, 17:00
#5Mon, 20 Apr 2026, 17:00

Field reference

FieldAllowed valuesSpecial characters
Minute0–59* , - /
Hour0–23* , - /
Day of month1–31* , - /
Month1–12* , - /
Day of week0–6 (Sun = 0)* , - /

* matches every value. , separates multiple values. - defines a range. / defines a step interval — e.g. */5 means every 5th value.

What is a cron expression?

A cron expression is a string of five fields separated by spaces that defines a schedule for automated tasks on Unix-like systems. Originally part of the cron daemon in Unix, the format has become the de facto standard for scheduling across virtually every platform — from Linux servers and CI/CD pipelines to cloud services like AWS CloudWatch, Google Cloud Scheduler, and Azure Functions.

Each of the five fields represents a time unit: minute, hour, day of the month, month, and day of the week. Together, they define precisely when a task should execute. The expression 30 9 * * 1-5 means "at 9:30 AM on every weekday," while 0 0 1 */3 * means "at midnight on the first day of every third month."

Common cron patterns explained

The most frequently searched cron expressions tend to follow a handful of patterns. Understanding these covers the vast majority of real-world scheduling needs.

Running at a fixed time daily — set the minute and hour fields to specific values and leave the rest as wildcards. The expression 0 6 * * * runs at 6:00 AM every day. This is by far the most common pattern for backup scripts, report generation, and log rotation.

Running every N minutes — use the step operator in the minute field. */5 * * * * runs every 5 minutes, and */15 * * * * every 15 minutes. These are typical for health checks, queue polling, and cache warming.

Weekday-only schedules — restrict the day-of-week field using a range. 0 9 * * 1-5 runs at 9 AM Monday through Friday. Useful for business-hours tasks like Slack notifications, standup reminders, and deployment windows.

Monthly tasks — set the day-of-month field. 0 0 1 * * runs at midnight on the first of every month. Common for billing cycles, monthly reports, and certificate renewal checks.

Cron in different environments

While the five-field format is universal, some platforms extend it. AWS EventBridge uses a sixth field for year and supports the ? wildcard. GitHub Actions uses standard five-field cron but runs in UTC. Kubernetes CronJobs follow the standard format but add timezone configuration via .spec.timeZone. This tool parses the standard five-field format, which is compatible with all major platforms.

Frequently asked questions

What does */5 mean in a cron expression?
The */5 syntax means "every 5th value." In the minute field, it triggers at minutes 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, and 55. The * means "starting from the minimum value" and /5 means "every 5th step." You can also start from a specific value: 3/5 in the minute field would run at minutes 3, 8, 13, 18, and so on.
What timezone do cron jobs run in?
By default, cron uses the system timezone of the server it runs on. On most cloud platforms, this defaults to UTC. You can check with timedatectl on Linux. Some platforms let you override this: Kubernetes CronJobs support a timeZone field, and GitHub Actions always runs in UTC. When scheduling business-hours tasks, always verify the timezone to avoid off-by-one-hour surprises during daylight saving changes.
How do I run a cron job every 30 seconds?
Standard cron only supports minute-level granularity — the smallest interval is every minute (* * * * *). For sub-minute scheduling, you need a different approach: use systemd.timer on Linux (which supports second-level precision), or run a process with an internal sleep loop rather than relying on cron.
What's the difference between 0 and 7 for Sunday?
In the original cron implementation, both 0 and 7 represent Sunday. This tool uses the POSIX standard where 0 = Sunday and 6 = Saturday. Some implementations (like Quartz scheduler in Java) use 1 = Sunday through 7 = Saturday. When in doubt, test with a simple expression like * * * * 0 to verify which day your platform treats as Sunday.
How do I schedule a job for the last day of the month?
Standard cron doesn't have a "last day of month" keyword. The common workaround is to schedule for a range and use a shell conditional: set the cron to run every day at your desired time, then start the script with [ "$(date +\%d -d tomorrow)" = "01" ] to check if tomorrow is the 1st. If it is, today is the last day of the month. Some extended implementations like Quartz support L for "last."