Cron Format

Cron format is a simple, yet powerful and flexible way to describe time and frequency of various actions. Cron format is extensively used in nnCron LITE.

Traditional (inherited from Unix) cron format consists of five fields separated by blank spaces:

<Minute> <Hour> <Day_of_the_Month> <Month_of_the_Year> <Day_of_the_Week>

nnCron LITE can use both traditional and "enhanced" version of cron format, which has an additional (6th) field: <Year>:

<Minute> <Hour> <Day_of_the_Month> <Month_of_the_Year> <Day_of_the_Week> <Year>

A user can choose the format he would like to use by changing the value of YearField variable in cron.ini. By default, nnCron LITE uses the traditional format, which we are going to use in our examples.

The following graph shows what it consists of:

* * * * *
| | | | |
| | | | +----- Day of the Week   (range: 1-7, where 1 is Monday)
| | | +------- Month of the Year (range: 1-12)
| | +--------- Day of the Month  (range: 1-31)
| +----------- Hour              (range: 0-23)
+------------- Minute            (range: 0-59)

Any of these 5 fields may contain an asterisk (*) as their value. An asterisk would mean the entire range of possible values, i.e. each minute, each hour, etc. In the first four fields, nnCron LITE users can also use "nonstandard" character ? (question mark). A description of its functions can be found here.

Any field may contain a list of values separated by commas, (e.g. 1,3,7) or a range of values (two integers separated by a hyphen, e.g. 1-5).

After an asterisk (*) or a range of values, you can use character / to specify that values are repeated with a certain interval between them. For example, you can write "0-23/2" in Hour field to specify that some action should be performed every two hours (it will have the same effect as "0,2,4,6,8,10,12,14,16,18,20,22"); value "*/4" in Minute field means that the action should be performed every 4 minutes, "1-30/3" means the same as "1,4,7,10,13,16,19,22,25,28".

In Month and Day of Week fields, you can use names of months or days of weeks abbreviated to first three letters ("Jan,Feb,...,Dec" or "Mon,Tue,...,Sun") instead of their numeric values.

Examples:

* * * * *                         Each minute

59 23 31 12 5                     One minute  before the end of year if the last day 
                                  of the year is Friday
									
59 23 31 Dec Fri                  Same as above (different notation)

45 17 7 6 *                       Every  year, on June 7th at 17:45

0,15,30,45 0,6,12,18 1,15,31 * 1-5  At 00:00, 00:15, 00:30, 00:45, 06:00, 06:15, 06:30,
                                  06:45, 12:00, 12:15, 12:30, 12:45, 18:00, 18:15,
                                  18:30, 18:45, on 1st, 15th or  31st of each  month,
                                  but not on weekends

*/15 */6 1,15,31 * 1-5              Same as above (different notation)

0 12 * * 1-5 (0 12 * * Mon-Fri)   At midday on weekdays

* * * 1,3,5,7,9,11 *              Each minute in January,  March,  May, July, September,
                                  and November

1,2,3,5,20-25,30-35,59 23 31 12 * On the  last day of year, at 23:01, 23:02, 23:03, 23:05,
                                  23:20, 23:21, 23:22, 23:23, 23:24, 23:25, 23:30,
                                  23:31, 23:32, 23:33, 23:34, 23:35, 23:59

0 9 1-7 * 1                       First Monday of each month, at 9 a.m.

0 0 1 * *                         At midnight, on the first day of each month

* 0-11 * *                        Each minute before midday

* * * 1,2,3 *                     Each minute in January, February or March

* * * Jan,Feb,Mar *               Same as above (different notation)

0 0 * * *                         Daily at midnight

0 0 * * 3                         Each Wednesday at midnight

nnCron LITE users can use an nonstandard character "?" in the first four fields of cron format. It stands for time of nnCron LITE startup, i. e. when a field is processed, startup time will be substituted for the question mark: minutes for Minute field, hour for Hour field, day of the month for Day of month field and month for Month field.

For example, if you write the following:

? ? * * *

the application will be started on nnCron LITE startup and then will be executed daily at the same time (unless the user doesn't restart nnCron LITE, of course): question marks will be "replaced" by nnCron LITE startup time. For example, if nnCron LITE was started at 8:25, question marks will be substituted in the following way:

25 8 * * *

Some more examples:

# application will be started only on nnCron LITE startup
? ? ? ? *
# application will be started on nnCron LITE startup (e.g. at 10:15) 
# and then will be executed again each hour: 
# at 11:15, 12:15, 13:15 etc.
? * * * *
# will be executed each minute after nnCron LITE startup until the next hour starts. 
# The next day, if nnCron LITE has not been restarted in the meanwhile,  
# it will be executed again each minute during the same hour.
* ? * * *
# will be executed daily,  every five minutes,
# during the hour when nnCron LITE was started
*/5 ? * * *