<< Click to Display Table of Contents >> Navigation: 4. How to use Anatella? > 4.8. Scheduling Anatella Graphs > 4.8.6. Defining when your graphs are running (CRON expressions) |
When we use the Anatella interface to schedule the excecution of our graphs inside Jenkins, in the second configuration screen, we can use a free-form “CRON expression” to define precisely when the graph will run. See here:
In the same way, using the classical Web interface to Jenkins, we can define when our Anatella graphs are running using the “Build periodically” option that takes a Free-form parameter named “Schedule” that is also a “CRON expression”:
These “CRON expressions” are strings that follow the syntax of the famous UNIX tool named “CRON” (with minor differences). Specifically, each line consists of 5 fields separated by TAB or whitespace. These 5 fields are “MINUTE HOUR DOM MONTH DOW”:
More precisely, we have:
1.MINUTE: Minutes within the hour (0–59)
2.HOUR: The hour of the day (0–23)
3.DOM: The day of the month (1–31)
4.MONTH: The month (1–12)
5.DOW: The day of the week (0–7) where 0 and 7 are Sunday.
To specify multiple values for one field, the following operators are available. In the order of precedence:
•* : specifies all valid values
•M-N :specifies a range of values
•*/X :specifies steps by intervals of X through the whole valid range
•M-N/X :specifies steps by intervals of X through the specified range
•A,B,...,Z :enumerates multiple values</li>
To allow periodically scheduled tasks to produce even load on the system, the symbol H (for “hash”) should be used wherever possible. For example, using “0 0 * * *” for a dozen daily jobs will cause a large spike at midnight. In contrast, using “H H * * *” would still execute each job once a day, but not all at the same time, better using limited resources.
The H symbol can be used with a range. For example, “H H(0-7) * * *” means to launch a job between 00:00 AM (midnight) to 7:59 AM. You can also use step intervals with H, with or without ranges. The H symbol can be thought of as a random value over a range, but it actually is a hash of the job name, not a random function, so that the value remains stable for any given project.
Beware that for the day of month field, short cycles such as “*/3” or “H/3” will not work consistently near the end of most months, due to variable month lengths. For example, “*/3” will run on the 1st, 4th, …31st days of a long month, then again the next day of the next month. Hashes are always chosen in the 1-28 range, so “H/3” will produce a gap between runs of between 3 and 6 days at the end of a month. (Longer cycles will also have inconsistent lengths but the effect may be relatively less noticeable.)
Empty lines and lines that start with # will be ignored as comments.
In addition, the following codes:
@yearly @annually @monthly @weekly @daily @midnight @hourly
…are supported as convenient aliases. These use the hash system for automatic balancing. For example, the code “@hourly” is the same as “H * * * *” and could mean at any time during the hour. The code “@midnight” actually means some time between 00:00 AM (midnight) and 2:59 AM.
Some examples:
Description |
CRON String |
Every day between midnight and 2:59 AM |
@midnight or H H(0-2) * * * |
Every fifteen minutes (perhaps at :07, :22, :37, :52): |
H/15 * * * * |
Every ten minutes in the first half of every hour (three times, perhaps at :04, :14, :24) |
H(0-29)/10 * * * *
|
Once every two hours at 45 minutes past the hour starting at 9:45 AM and finishing at 3:45 PM every weekday (excluding weekends). |
45 9-16/2 * * 1-5
|
Once in every two hours slot between 9 AM and 5 PM every weekday (perhaps at 10:38 AM, 12:38 PM, 2:38 PM, 4:38 PM) |
H H(9-16)/2 * * 1-5
|
Once a day on the 1st and 15th of every month except December |
H H 1,15 1-11 * |
Once a week, every sunday |
H H * * 0 |