From 1ea0ea0b1b2c4cd5caefaa1dcc79c672f5765ac6 Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Fri, 9 Mar 2012 20:05:50 +0100 Subject: [PATCH 1/3] add support for crontab EXTENSIONS, e.g. @reboot Signed-off-by: Steven Armstrong --- conf/type/__cron/man.text | 12 ++++++-- conf/type/__cron/manifest | 45 ++++++++--------------------- conf/type/__cron/parameter/optional | 1 + 3 files changed, 23 insertions(+), 35 deletions(-) diff --git a/conf/type/__cron/man.text b/conf/type/__cron/man.text index c4852b7f..2e3ae925 100644 --- a/conf/type/__cron/man.text +++ b/conf/type/__cron/man.text @@ -35,14 +35,22 @@ month:: See crontab(5). Defaults to * day_of_week:: See crontab(5). Defaults to * +special:: + See EXTENSIONS in crontab(5). e.g. reboot, yearly, monthly + If given all other time and date fields are ignored. EXAMPLES -------- -------------------------------------------------------------------------------- -# add cronjob -__cron some-id --user root --command "/path/to/script" +# run Monday to Saturday at 23:15 +__cron some-id --user root --command "/path/to/script" \ + --hour 23 --minute 15 --day_of_week 1-6 + +# run on reboot +__cron some-id --user root --command "/path/to/script" \ + --special reboot # remove cronjob __cron some-id --user root --command "/path/to/script" --state absent diff --git a/conf/type/__cron/manifest b/conf/type/__cron/manifest index 01c4358c..e8a77229 100755 --- a/conf/type/__cron/manifest +++ b/conf/type/__cron/manifest @@ -23,44 +23,23 @@ user="$(cat "$__object/parameter/user")" command="$(cat "$__object/parameter/command")" # set defaults -if [ ! -f "$__object/parameter/state" ]; then - echo "present" > "$__object/parameter/state" -fi -if [ -f "$__object/parameter/minute" ]; then - minute="$(cat "$__object/parameter/minute")" +test -f "$__object/parameter/state" || echo "present" > "$__object/parameter/state" + +if [ -f "$__object/parameter/special" ]; then + special="$(cat "$__object/parameter/special")" + entry="@$special $command" else - minute="*" - echo "$minute" > "$__object/parameter/minute" -fi -if [ -f "$__object/parameter/hour" ]; then - hour="$(cat "$__object/parameter/hour")" -else - hour="*" - echo "$hour" > "$__object/parameter/hour" -fi -if [ -f "$__object/parameter/day_of_month" ]; then - day_of_month="$(cat "$__object/parameter/day_of_month")" -else - day_of_month="*" - echo "$day_of_month" > "$__object/parameter/day_of_month" -fi -if [ -f "$__object/parameter/month" ]; then - month="$(cat "$__object/parameter/month")" -else - month="*" - echo "$month" > "$__object/parameter/month" -fi -if [ -f "$__object/parameter/day_of_week" ]; then - day_of_week="$(cat "$__object/parameter/day_of_week")" -else - day_of_week="*" - echo "$day_of_week" > "$__object/parameter/day_of_week" + minute="$(cat "$__object/parameter/minute" 2>/dev/null || echo "*")" + hour="$(cat "$__object/parameter/hour" 2>/dev/null || echo "*")" + day_of_month="$(cat "$__object/parameter/day_of_month" 2>/dev/null || echo "*")" + month="$(cat "$__object/parameter/month" 2>/dev/null || echo "*")" + day_of_week="$(cat "$__object/parameter/day_of_week" 2>/dev/null || echo "*")" + entry="$minute $hour $day_of_month $month $day_of_week $command" fi # NOTE: if changed, also change in explorers prefix="#cdist:__cron/$name" suffix="#/cdist:__cron/$name" echo "$prefix" | tee "$__object/parameter/prefix" > "$__object/parameter/entry" -echo "$minute $hour $day_of_month $month $day_of_week $command" >> "$__object/parameter/entry" +echo "$entry" >> "$__object/parameter/entry" echo "$suffix" | tee "$__object/parameter/suffix" >> "$__object/parameter/entry" - diff --git a/conf/type/__cron/parameter/optional b/conf/type/__cron/parameter/optional index 1a4aae3d..e81b64c3 100644 --- a/conf/type/__cron/parameter/optional +++ b/conf/type/__cron/parameter/optional @@ -4,3 +4,4 @@ hour day_of_month month day_of_week +special From 10d0cf00d66a66be937b5234f5073de12d34fa7c Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Sat, 10 Mar 2012 14:07:13 +0100 Subject: [PATCH 2/3] /special/raw/ Signed-off-by: Steven Armstrong --- conf/type/__cron/man.text | 9 +++++---- conf/type/__cron/manifest | 6 +++--- conf/type/__cron/parameter/optional | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/conf/type/__cron/man.text b/conf/type/__cron/man.text index 2e3ae925..039be04c 100644 --- a/conf/type/__cron/man.text +++ b/conf/type/__cron/man.text @@ -35,9 +35,10 @@ month:: See crontab(5). Defaults to * day_of_week:: See crontab(5). Defaults to * -special:: - See EXTENSIONS in crontab(5). e.g. reboot, yearly, monthly - If given all other time and date fields are ignored. +raw:: + Take whatever the user has given instead of time and date fields. + If given, all other time and date fields are ignored. + Can for example be used to specify cron EXTENSIONS like reboot, yearly etc. EXAMPLES @@ -50,7 +51,7 @@ __cron some-id --user root --command "/path/to/script" \ # run on reboot __cron some-id --user root --command "/path/to/script" \ - --special reboot + --raw @reboot # remove cronjob __cron some-id --user root --command "/path/to/script" --state absent diff --git a/conf/type/__cron/manifest b/conf/type/__cron/manifest index e8a77229..7aca41ff 100755 --- a/conf/type/__cron/manifest +++ b/conf/type/__cron/manifest @@ -25,9 +25,9 @@ command="$(cat "$__object/parameter/command")" # set defaults test -f "$__object/parameter/state" || echo "present" > "$__object/parameter/state" -if [ -f "$__object/parameter/special" ]; then - special="$(cat "$__object/parameter/special")" - entry="@$special $command" +if [ -f "$__object/parameter/raw" ]; then + raw="$(cat "$__object/parameter/raw")" + entry="$raw $command" else minute="$(cat "$__object/parameter/minute" 2>/dev/null || echo "*")" hour="$(cat "$__object/parameter/hour" 2>/dev/null || echo "*")" diff --git a/conf/type/__cron/parameter/optional b/conf/type/__cron/parameter/optional index e81b64c3..517d821e 100644 --- a/conf/type/__cron/parameter/optional +++ b/conf/type/__cron/parameter/optional @@ -4,4 +4,4 @@ hour day_of_month month day_of_week -special +raw From f3545a51fe88edf0ce8bf92d794f6f39b0500091 Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Sat, 10 Mar 2012 14:08:57 +0100 Subject: [PATCH 3/3] be nice with them users Signed-off-by: Steven Armstrong --- conf/type/__cron/man.text | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/type/__cron/man.text b/conf/type/__cron/man.text index 039be04c..47f47456 100644 --- a/conf/type/__cron/man.text +++ b/conf/type/__cron/man.text @@ -39,6 +39,8 @@ raw:: Take whatever the user has given instead of time and date fields. If given, all other time and date fields are ignored. Can for example be used to specify cron EXTENSIONS like reboot, yearly etc. + See crontab(5) for the extensions if any that your cron implementation + implements. EXAMPLES