Understanding CRON Expressions

Subscribe to my newsletter and never miss my upcoming articles

Many Azure resources like web jobs, Azure functions, logic apps use CRON expression when they need to work with Time Triggers. A CRON expression lets you define a time trigger with the help of six fields. All the possible time triggers let it be 'Once an hour' to '14 times a day' can be defined using a CRON expression.

Understanding the expression

As mentioned earlier, a CRON expression includes six fields:

{second} {minute} {hour} {day} {month} {day-of-week}

And each field can have one of the following values:

TypeExampleTriggered
Specific Value0 5 * * * *At every hour at that hour past 5 minutes
All Values (*)0 * 5 * * *At the 5th hour of day (05:mm:00), trigger it every minute of the hour
A range ( - )8-10 * * * * *At hh:mm:08,hh:mm:09,hh:mm:10 where hh:mm is every minute of every hour. 3 times a minute at 8,9,10th second
A set ( , )1,5,25 * * * * *At hh:mm:01, hh:mm:05, hh:mm:25 where hh:mm is every minute of every hour. 3 times a minute at 1, 5, 25th second
An Interval ( / )0 */5 * * * *At hh:05:00, hh:10:00, hh:15:00 and so on till hh:55:00, hh:00:00 where hh is every hour. 12 times an hour

CRON Examples

Some of the frequently used CRON expression samples

ExpressionTriggered
*/10 * * * * *Every 15 seconds
0 * * * * *Every minute
15 * * * * *Every minute at 15th Second of that minute
0 */10 * * * *Once every 10 minutes
0 0 * * * *Once every hour at 0th minute
0 0 */4 * * *Once every 4 hours
0 0 9-17 * * *Once every hour from 9AM to 5pm
0 0 0 * * *Every day at 00:00:00
0 30 10 * * *at 10:30 am every day
0 30 10 2 * *at 10:30 am every 2nd day of every month
0 30 10 * * 0,6at 10:30 am every weekend (Sat, Sun)
0 30 10 * * 1-5at 10:30 am every weekday
0 0 * * * WED,FRIEvery hour on Wednesday and Friday
0 0 0 * * SUNEvery Sunday at 00:00:00
0 0 0 1-7 * SUNEvery first Sunday of the month at 00:00:00
0 0 0 1 * *Every 1st of month at 00:00:00
0 0 0 1 1 *Every 1st of January every year
0 0 * * 1 *Every hour in January
30 5 */6 * * *Every 6 hours at 5 minute 30 seconds

Common pitfalls:

The CRON expression 0 0 */5 * * * means every 5 hours. So it executes at 00:00:00, 05:00:00, 10:00:00, 15:00:00, 20:00:00, 00:00:00 ... So it's not exactly every 5 hours. If you want a regular frequency, the following expressions are good:

  • For minutes and seconds : /2, /3, /4, /5, /6, /10, /12, /15, /20 and /30 (60 is divisible by these numbers)
  • For hours : /2, /3, /4, /6, /8 and /12
  • For Months : /2, /3, /4 and /6
  • For days : Nothing actually because there are leap years and months with 28, 29, 30 or 31 days.

If you want a cyclic approach, all other values can lead to "wrong" executions at the end of the cycle. e.g. Every 10 hours executes at 00:00:00, 10:00:00, 20:00:00, 00:00:00 (only 4 hours, not 10).

You can find CRON expression examples online, but many of them omit the {second} field. In case you copy one of them, remember to add the missing {second} field. Also, you will want a zero in that field and not an asterisk

Additional references:

Time trigger for Azure Functions: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer

CRON Expression Descriptor: https://cronexpressiondescriptor.azurewebsites.net/

No Comments Yet