# Understanding CRON Expressions

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/

## No Comments Yet