Cron Expression Generator

Explain any cron schedule in plain English, see the next 10 runs in IST, build new ones

5 fields
min hour day(month) month weekday
Cron follows the server's clock. If unsure, run date on the server, or check the job's CRON_TZ / timeZone setting.
In plain English
โ€ฆ
Working out run timesโ€ฆ
Build an expression
30 9 * * *

Runs entirely in your browser. Nothing you type or upload is sent to us or stored.

Results are for general guidance. Please check anything important before relying on it. Terms of use

How to Use

  1. Paste or type your cron expression in the Cron expression box, for example */15 9-18 * * 1-5. Five fields are standard; six fields are read as seconds first (Spring, node-cron, Quartz).
  2. Or pick one of the Common schedules, such as "Weekdays at 9 AM" or "1st of every month".
  3. Choose the time zone of the server that runs the job. Cloud servers, Docker containers and GitHub Actions usually run in UTC.
  4. Read the plain-English meaning and the next 10 run times, shown in the server's zone, your own zone and IST. If something is wrong with the expression, a red message says which field and why.
  5. To write a new schedule, use Build an expression: choose every N minutes, every N hours, daily, weekly or monthly, set the time, then tap Use this and copy the result.

What is a cron expression?

Cron is the job scheduler built into Linux and macOS. A cron expression is a short line of five fields that says when a job should run: database backups at 2 AM, a report every Monday morning, a cache refresh every 15 minutes. The same syntax is used by crontab files, GitHub Actions schedules, Kubernetes CronJobs, Jenkins, Laravel's scheduler and many cloud services.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ minute (0โ€“59)
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€ hour (0โ€“23)
โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€ day of month (1โ€“31)
โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€ month (1โ€“12 or JANโ€“DEC)
โ”‚ โ”‚ โ”‚ โ”‚ โ”Œ day of week (0โ€“6 or SUNโ€“SAT; 7 is also Sunday)
* * * * *

Six-field expressions, used by Spring's @Scheduled, node-cron and Quartz, add a seconds field at the front. This tool reads six fields that way. AWS EventBridge also uses six fields, but its extra field is a year at the end; remove the year to check an AWS schedule here.

Special characters

SymbolMeaningExample
*Every value* * * * * runs every minute
,A list0 9,18 * * * runs at 9:00 and 18:00
-A range0 9 * * 1-5 runs Monday to Friday at 9:00
/A step*/15 * * * * runs at :00, :15, :30 and :45
@daily etc.Shortcuts@hourly, @daily, @weekly, @monthly, @yearly

A step restarts at the start of each hour or day. */7 in the minute field runs at :00, :07 โ€ฆ :56 and then :00 again, so the last gap is only 4 minutes. Pick steps that divide evenly into 60 (minutes) or 24 (hours) for regular spacing.

Worked example: a 9 AM IST job on a UTC server

Most cloud servers, containers and GitHub Actions run on UTC. India Standard Time is UTC+5:30 all year (India has no daylight saving), so 9:00 AM IST is 3:30 AM UTC. To run a job at 9:00 AM IST from Monday to Saturday on a UTC server:

Wanted: 09:00 IST, Mondayโ€“Saturday
Subtract 5 h 30 min โ†’ 03:30 UTC
Cron: 30 3 * * 1-6

Paste 30 3 * * 1-6 above, keep the server zone on UTC, and the IST column shows 09:00 for every run. If the IST time crosses midnight when you subtract 5:30 (for example 2:00 AM IST is 20:30 UTC the previous day), shift the weekdays back by one as well.

Day of month and day of week together

When both day fields are set, standard Linux cron runs the job if either matches. 0 0 13 * 5 therefore runs on every 13th and every Friday, not only on Friday the 13th. If one of the two fields starts with *, only the other one counts. This tool follows that rule, so the next-run list shows exactly what crontab would do.

Tips and caveats

  • Day 31 skips months that don't have 31 days, and 0 0 30 2 * never runs. The tool says so when a schedule has no future runs.
  • In zones with daylight saving (US, Europe, Australia), a time that is skipped when clocks go forward doesn't run that day, and a repeated hour runs once. Some cron versions handle this differently; India and UTC are not affected.
  • L, W and # (last day, nearest weekday, "third Friday") are Quartz extensions, not standard cron. Standard crontab can't express "last day of the month" directly; run on days 28โ€“31 and check the date in your script.
  • Cron's environment is minimal: use full paths to programs and redirect output to a log file, for example >> /var/log/backup.log 2>&1.

Frequently Asked Questions

Use */5 * * * *. The */5 in the minute field means every fifth minute starting at 0, so the job runs at :00, :05, :10 and so on, every hour of every day. For every 5 minutes only during office hours on weekdays, use */5 9-18 * * 1-5.

Cron uses the clock of the machine it runs on. Most cloud servers, Docker containers and GitHub Actions use UTC, which is 5 hours 30 minutes behind IST. So 0 9 * * * on a UTC server runs at 2:30 PM IST. Choose the server's zone in the tool to see the matching IST times.

Standard Linux cron has five fields: minute, hour, day of month, month and day of week. Spring, node-cron and Quartz add a seconds field at the start, so */30 * * * * * means every 30 seconds. AWS EventBridge also has six fields, but its extra one is a year at the end.

Both. In the day-of-week field 0 and 7 both mean Sunday, 1 is Monday and 6 is Saturday. You can also write names: SUN, MON, TUE and so on, for example 0 10 * * SAT,SUN for weekends at 10 AM.

When both the day-of-month and day-of-week fields are restricted, standard cron runs the job if either one matches. 0 0 1 * 1 runs on the 1st of every month and also on every Monday. To run only on certain dates, leave the weekday field as *.

Standard cron has no 'last day' symbol (L is a Quartz extension). A common workaround is to schedule the job for days 28 to 31 (for example 0 23 28-31 * *) and have the script exit unless tomorrow is the 1st of the month.