Support random offsets when using ranges with a step value in cron.
authormillert <millert@openbsd.org>
Sat, 6 May 2023 23:06:27 +0000 (23:06 +0000)
committermillert <millert@openbsd.org>
Sat, 6 May 2023 23:06:27 +0000 (23:06 +0000)
commiteda09dd8f1374cdbf3404f54e0b9d7fb846a9704
treead145422566e2028847adc32932db088d24430ec
parent17499c705c96a17d875bc49373bd3e31856dab37
Support random offsets when using ranges with a step value in cron.
This extends the random range syntax to support step values.  Instead
of choosing a random number between the high and low values, the
field is treated as a range with a random offset less than the step
value.  This can be used to avoid thundering herd problems where
multiple machines contact a server all at the same time via cron jobs.

The syntax is similar to the existing range/step syntax but uses a
random range.  For example, instead of "0-59/10" in the minutes
field, "0~59/10" can be used to run a command every 10 minutes where
the first command starts at a random offset in the range [0,9].
The high and low numbers are optional, "~/10" can be used instead.

Requested by job@, OK phessler@
usr.sbin/cron/crontab.5
usr.sbin/cron/entry.c
usr.sbin/cron/macros.h