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
);
"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
orlocal
. - 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>