NAME `Algorithm::Cron' - abstract implementation of the cron(8) scheduling algorithm SYNOPSIS use Algorithm::Cron; my $cron = Algorithm::Cron->new( base => 'local', crontab => "*/10 9-17 * * *", ); my $time = time; while(1) { $time = $cron->next_time( $time ); sleep( time - $time ); print "Do something\n"; } DESCRIPTION Objects in this class implement a time scheduling algorithm such as used by cron(8). Objects are stateless once constructed, and represent a single schedule as defined by a crontab(5) entry. The object implements a method `next_time' which returns an epoch timestamp value to indicate the next time included in the crontab schedule. Crontabs The schedule is provided as a set of acceptable values for each field of the broken-down time (as returned by `localtime' or `gmtime'), either in a single string called `crontab' or by a set of named strings, each taking the name of a crontab(5) field. my $cron = Algorithm::Cron->new( base => 'local', crontab => '0 9 * * mon-fri', ); my $cron = Algorithm::Cron->new( base => 'local', min => 0, hour => 9, wday => "mon-fri", ); A `crontab' field containing a single asterisk (`*'), or a missing named field, indicates that any value here is included in the scheduled times. To restrict the schedule, a value or set of values can be provided. This should consist of one or more comma-separated numbers or ranges, where a range is given as the start and end points, both inclusive. hour => "3-6" hour => "3,4,5,6" Ranges can also be prefixed by a value to give the increment for values in that range. min => "*/10" min => "0,10,20,30,40,50" The `mon' and `wday' fields also allow symbolic month or weekday names in place of numeric values. These names are always in the C locale, regardless of the system's locale settings. mon => "mar-sep" wday => "mon,wed,fri" Specifying `sun' as the end of a `wday' range, or giving the numeric value of `7' is also supported. wday => "fri-sun" wday => "5-7" # Both equivalent to: wday => "0,5,6" As per cron(8) behaviour, this algorithm looks for a match of the `min', `hour' and `mon' fields, and at least one of the `mday' or `mday' fields. If both `mday' and `wday' are specified, a match of either will be sufficient. As an extension, seconds may be provided either by passing six space-separated fields in the `crontab' string, or as an additional `sec' field. If not provided it will default to `0'. If six fields are provided, the first gives the seconds. Time Base `Algorithm::Cron' supports using either UTC or the local timezone when comparing against the given schedule. CONSTRUCTOR $cron = Algorithm::Cron->new( %args ) Constructs a new `Algorithm::Cron' object representing the given schedule relative to the given time base. Takes the following named arguments: base => STRING Gives the time base used for scheduling. Either `utc' or `local'. crontab => STRING Gives the crontab schedule in 5 or 6 space-separated fields. sec => STRING, min => STRING, ... mon => STRING Optional. Gives the schedule in a set of individual fields, if the `crontab' field is not specified. METHODS @seconds = $cron->sec @minutes = $cron->min @hours = $cron->hour @mdays = $cron->mday @months = $cron->mon @wdays = $cron->wday Accessors that return a list of the accepted values for each scheduling field. These are returned in a plain list of numbers, regardless of the form they were specified to the constructor. Also note that the list of valid months will be 0-based (in the range 0 to 11) rather than 1-based, to match the values used by `localtime', `gmtime', `mktime' and `timegm'. $time = $cron->next_time( $start_time ) Returns the next scheduled time, as an epoch timestamp, after the given timestamp. This is a stateless operation; it does not change any state stored by the `$cron' object. AUTHOR Paul Evans <leonerd@leonerd.org.uk>