fix #35: add configurable randomized delay flag and behavior
This commit is contained in:
parent
3c4f3b777b
commit
a6fb5ea28f
2
Cargo.lock
generated
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
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)));
|
||||
|
Loading…
x
Reference in New Issue
Block a user