fix : add configurable randomized delay flag and behavior

This commit is contained in:
Konstantin Stepanov 2016-04-17 20:46:38 +03:00
parent 3c4f3b777b
commit a6fb5ea28f
6 changed files with 26 additions and 5 deletions

2
Cargo.lock generated

@ -1,6 +1,6 @@
[root]
name = "systemd-crontab-generator"
version = "1.0.0-rc7"
version = "1.0.0-rc8"
dependencies = [
"cronparse 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
"docopt 0.6.78 (registry+https://github.com/rust-lang/crates.io-index)",

@ -1,6 +1,6 @@
[package]
name = "systemd-crontab-generator"
version = "1.0.0-rc7"
version = "1.0.0-rc8"
description = "Systemd generator for crontab files support"
readme = "README.md"
repository = "https://github.com/systemd-cron/systemd-cron-next"
@ -10,7 +10,7 @@ build = "build.rs"
keywords = ["cron", "crontab", "systemd", "generator"]
[features]
default = ["sched-boot", "sched-hourly", "sched-daily", "sched-weekly", "sched-monthly"]
default = ["sched-boot", "sched-hourly", "sched-daily", "sched-weekly", "sched-monthly", "randomized-delay"]
sched-boot = []
sched-hourly = []
@ -21,6 +21,7 @@ sched-yearly = []
sched-minutely = []
sched-quarterly = []
sched-semi-annually = []
randomized-delay = []
persistent = []
[build-dependencies]

@ -4,6 +4,7 @@ version := $(shell awk '/^version =/ { gsub("\"", "", $$3); print $$3; exit }'
schedules := @schedules@
enable_persistent := @enable_persistent@
enable_randomized_delay := @enable_randomized_delay@
prefix := @prefix@
bindir := @bindir@
@ -41,6 +42,7 @@ endef
null :=
persistent = $(if $(filter $(enable_persistent),yes),persistent,)
randomized_delay = $(if $(filter $(enable_randomized_delay),yes),randomized-delay,)
all: build
@ -66,7 +68,7 @@ build: all
BIN_DIR="$(bindir)" CONF_DIR="$(confdir)" MAN_DIR="$(mandir)" DOC_DIR="$(docdir)" \
DATA_DIR="$(datadir)" LIB_DIR="$(libdir)" UNIT_DIR="$(unitdir)" \
cargo install --path $(CURDIR) --root $(builddir) \
--features "$(foreach schedule,$(schedules),sched-$(schedule)) $(persistent)"
--features "$(foreach schedule,$(schedules),sched-$(schedule)) $(persistent) $(randomized_delay)"
install: build
install -m2755 -g `getent group cron || echo root` -s -D $(builddir)/bin/crontab $(DESTDIR)$(bindir)/crontab

@ -87,6 +87,7 @@ To further control cron jobs, use `cron.target` unit.
* systemd ≥ 209, yearly timers
* systemd ≥ 212, persistent timers
* systemd ≥ 217, minutely, quarterly & semi-annually timers
* systemd ≥ 229, real random delay support with `RandomizedDelaySec` option
* [run-parts][]
* /usr/sbin/sendmail (optional, evaluated at runtime)
@ -155,6 +156,8 @@ Other options include:
Default: `no`.
* `--enable-persistent[=yes|no]` Make timers [persistent][5]. Requires systemd ≥ 212.
Default: `no`.
* `--enable-randomized-delay=[yes|no]` Use [`RandomizedDelaySec`][6] option for `RANDOM_DELAY` support. Requires systemd ≥ 229.
Default: `yes`.
A typical configuration for the latest systemd would be:
@ -164,6 +167,8 @@ If you only want the generator (you'll have to provide your own `/etc/crontab` t
$ ./configure --enable-boot=no --enable-hourly=no --enable-daily=no --enable-weekly=no --enable-month=no --enable-persistent --prefix=/usr --confdir=/etc
[5]: https://www.freedesktop.org/software/systemd/man/systemd.timer.html#RandomizedDelaySec=
### Caveat
Your package should also run these extra commands before starting cron.target

9
configure vendored

@ -29,6 +29,9 @@ enable_minutely=no
enable_quarterly=no
enable_semi_annually=no
# systemd ≥ 229
enable_randomized_delay=yes
ARGS=$(getopt -n "$(basename "${0}")" -o '' -l '
prefix:,
bindir:,
@ -50,6 +53,7 @@ enable-quarterly::,
enable-semi_annually::,
enable-yearly::,
enable-persistent::,
enable-randomized-delay::,
' -- "${@}")
if [ $? -ne 0 ]; then
@ -151,6 +155,10 @@ do
set_enable_flag persistent ${2}
shift 2;;
'--enable-randomized-delay')
set_enable_flag randomized_delay ${2}
shift 2;;
'--')
shift
break;;
@ -190,6 +198,7 @@ echo '# Generated by ./configure' > Makefile
sed "
s|@schedules@|${schedules}|g
s|@enable_persistent@|${enable_persistent}|g
s|@enable_randomized_delay@|${enable_randomized_delay}|g
s|@prefix@|${prefix}|g
s|@bindir@|${bindir}|g
s|@confdir@|${confdir}|g

@ -285,7 +285,11 @@ Unit={service_unit_name}"###,
}
if random_delay != 1 {
try!(writeln!(timer_unit_file, "AccuracySec={}m", random_delay));
if cfg!(feature="randomized-delay") {
try!(writeln!(timer_unit_file, "RandomizedDelaySec={}m", random_delay));
} else {
try!(writeln!(timer_unit_file, "AccuracySec={}m", random_delay));
}
}
}
try!(symlink(timer_unit_path, cron_target_wants_path.join(timer_unit_name)));