From 1ea0ea0b1b2c4cd5caefaa1dcc79c672f5765ac6 Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Fri, 9 Mar 2012 20:05:50 +0100 Subject: [PATCH] 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