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:
Type | Example | Triggered |
Specific Value | 0 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
Expression | Triggered |
*/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,6 | at 10:30 am every weekend (Sat, Sun) |
0 30 10 * * 1-5 | at 10:30 am every weekday |
0 0 * * * WED,FRI | Every hour on Wednesday and Friday |
0 0 0 * * SUN | Every Sunday at 00:00:00 |
0 0 0 1-7 * SUN | Every 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/