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:
- Seconds
- Minutes
- Hours
- Day-of-Month
- Month
- Day-of-Week
- 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 * ?