Access Manager: Cron Expressions


Access Manager has a number of jobs and tasks that can be configured to run on a schedule. To configure a schedule you will need to provide a Cron Expression that is able to tell Access Manager when these events should be run.


What are Cron Expressions?

Cron Expressions are strings that are made up of seven sub-expressions, that describe individual details of the schedule. These sub-expression are separated with white-space, and represent:

  1. Seconds
  2. Minutes
  3. Hours
  4. Day-of-Month
  5. Month
  6. Day-of-Week
  7. Year (optional field)

An example of a complete cron expression is the string 0 0 12 ? * WED - which means "every Wednesday at 12:00:00 pm".


How do you create a Cron Expression?

Individual sub-expressions can contain ranges and/or lists. For example, the day of week field in the previous example stating WED could be replaced with MON-FRI (for Monday through to Friday), MON,WED,FRI (for Monday, Wednesday, and Friday), or even MON-WED,SAT (for Monday through to Wednesday and then Saturday).

Wild-cards (the * character) can be used to say "every" possible value of this field. Therefore the * character in the "Month" field of the previous example simply means "every month". A * in the Day-Of-Week field would therefore obviously mean "every day of the week".

All of the fields have a set of valid values that can be specified. These values should be fairly obvious - such as the numbers 0 to 59 for seconds and minutes, and the values 0 to 23 for hours. Day-of-Month can be any value 1-31, be aware of the number of days in any given month when setting this. Months can be specified as values between 0 and 11, or by using the strings JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV and DEC. Days-of-Week can be specified as values between 1 and 7 (1 = Sunday) or by using the strings SUN, MON, TUE, WED, THU, FRI and SAT.

The / character can be used to specify increments to values. For example, if you put 0/15 in the Minutes field, it means "every 15th minute of the hour, starting at minute zero". If you used 3/20 in the Minutes field, it would mean "every 20th minute of the hour, starting at minute three" - or in other words it is the same as specifying "3,23,43" in the Minutes field. Note the subtlety that /35 does not mean "every 35 minutes" - it mean "every 35th minute of the hour, starting at minute zero" - or the same as specifying "0/35".

The ? character is allowed for the day-of-month and day-of-week fields. It is used to specify "no specific value". This is useful when you need to specify something in one of the two fields, but not the other.

The L character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "last", but it has different meaning in each of the two fields. For example, the value L in the day-of-month field means "the last day of the month" - day 31 for January, day 28 for February on non-leap years. If used in the day-of-week field by itself, it simply means "7" or "SAT". But if used in the day-of-week field after another value, it means "the last xxx day of the month" - for example 6L or FRIL both mean "the last friday of the month". You can also specify an offset from the last day of the month, such as L-3 which would mean the third-to-last day of the calendar month. When using the "L" option, it is important not to specify lists, or ranges of values, as you’ll get confusing/unexpected results.

The W is used to specify the weekday (Monday-Friday) nearest the given day. As an example, if you were to specify 15W as the value for the day-of-month field, the meaning is: "the nearest weekday to the 15th of the month".

The # is used to specify "the nth" XXX weekday of the month. For example, the value of 6#3 or FRI#3 in the day-of-week field means "the third Friday of the month".


Examples of Cron Expressions

Here are a few more examples of expressions and their meanings:

  • Example 1 - an expression to create a trigger that simply fires every 5 minutes

0 0/5 * * * ?

  • Example 2 - an expression to create a trigger that fires every 5 minutes, at 10 seconds after the minute (i.e. 10:00:10 am, 10:05:10 am, etc.).

10 0/5 * * * ?

  • Example 3 - an expression to create a trigger that fires at 10:30, 11:30, 12:30, and 13:30, on every Wednesday and Friday.

0 30 10-13 ? * WED,FRI

  • Example 4 - an expression to create a trigger that fires every half hour between the hours of 8 am and 10 am on the 5th and 20th of every month. Note that the trigger will NOT fire at 10:00 am, just at 8:00, 8:30, 9:00 and 9:30

0 0/30 8-9 5,20 * ?