NAME

Minion::Util - Minion utility functions

SYNOPSIS

use Minion::Util qw(desired_tasks next_cron_time parse_cron);

DESCRIPTION

Minion::Util provides utility functions for Minion.

FUNCTIONS

Minion::Util implements the following functions, which can be imported individually.

desired_tasks

my $desired_tasks = desired_tasks $limits, $available_tasks, $active_tasks;

Enforce limits and generate list of currently desired tasks.

# ['bar']
desired_tasks {foo => 2}, ['foo', 'bar'], ['foo', 'foo'];

next_cron_time

my $epoch = next_cron_time $expr,   $from;
my $epoch = next_cron_time $parsed, $from;

Compute the next epoch time matching a five field cron expression, strictly after the given epoch. All times are interpreted in UTC, not local time. Accepts either a cron expression string or a structure returned by "parse_cron", so the parsed form can be reused across calls without reparsing.

# 1747051500 (next 12:05 UTC after 1747051200)
next_cron_time '*/5 * * * *', 1747051200;

# Reuse the parsed structure
my $cron = parse_cron '0 4 * * *';
my $next = next_cron_time $cron, time;

parse_cron

my $parsed = parse_cron $expr;

Parse a five field cron expression into a structure suitable for matching. Croaks on invalid input. The supported syntax covers *, */N, a-b, a-b/N and comma separated lists for the fields minute, hour, day-of-month, month and day-of-week. The month field also accepts the names JAN-DEC, and the day-of-week field accepts SUN-SAT and treats both 0 and 7 as Sunday (names are case-insensitive). When both day-of-month and day-of-week are restricted, jobs run when either matches, following the standard Vixie cron(8) behavior. The nicknames @yearly, @annually, @monthly, @weekly, @daily, @midnight and @hourly expand to the equivalent five field expression.

# Every weekday at 9 in the morning
parse_cron '0 9 * * MON-FRI';

# Every day at midnight
parse_cron '@daily';

SEE ALSO

Minion, Minion::Guide, https://minion.pm, Mojolicious::Guides, https://mojolicious.org.