Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

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>