(Click on images for higher definition view)
A calendar is a named resource which either contains or generates a list of times and dates. Calendars are created independently of jobs and are fully re-usable objects which are subsequently attached to the jobs and/or suites which need to use them. cosbatch is shipped with a predefined list of commonly used calendars.
A calendar may contain explicit definitions by quoting days of the week, days of the month, week numbers, and so on. Jobs and suites may also be run by quoting a frequency such as “every five days”.
A calendar may be used either to enable execution or to disable execution, so that when they are nested together, some complex results can be generated. In this way we can end up with a scheduling scheme that, for example, specifies that a job should execute on the last Monday of every month, other than when the Monday is a Public Holiday, in which case run it on the Tuesday.
cosbatch calendars can be combined into calendar expressions by means of operators. The meaning of these operators as applied to calendars is defined in terms of operations on the sets of times that these calendars generate. In addition, there is a merge operator which supports the separation of the specification of a job execution's time of day from its calendar day. The complete set of supported operators includes the set operators of union, intersection, complement and exclusion (set subtraction). There are shift operators that allow a set of times to be adjusted forwards or backwards in time, and chain operators that allow calendars to be combined according to first-after or last-before rules.
It is also possible to define a calendar that may be used to schedule a job or a suite according to week numbers. The definition of a week may either be configured globally by the cosbatch administrator, or else specified as an attribute of the calendar. Site-specific week definitions (e.g. relative to a company-specific financial year) are supported.
Calendars may also be specified using backward counting of weeks from the end of year (calendar year or user-specified) or of days from the end of a month. For example, run a job on the penultimate day of each month. This simplifies the expression of many common use cases and removes the need for exceptional handling of leap days.
Calendars may also be defined to encapsulate different timezones, permitting jobs and suites to be scheduled according to differing local time settings, a major boost for international organizations.