-f <file> Use <file> for the main configuration instead of
/etc/backupninja.conf
+
CONFIGURATION FILES
===================
pear = no thanks \
i will not have a pear.
+
+SCHEDULING
+==========
+
+By default, each configuration file is processed everyday at 01:00 (1
+AM). This can be changed by specifying the 'when' option in a config
+file.
+
+For example:
+
+ when = sundays at 02:00
+ when = 30th at 22
+ when = 30 at 22:00
+ when = everyday at 01 <-- the default
+ when = Tuesday at 05:00
+
+A configuration file will be processed at the time(s) specified by the
+"when" option. If multiple "when" options are present, then they all
+apply. If two configurations files are scheduled to run in the same
+hour, then we fall back on the alphabetical ordering specified above.
+If two configurations files are scheduled close to one another in
+time, it is possible to have multiple copies of backupninja running if
+the first instance is not finished before the next one starts.
+
+These values for 'when' are equivalent:
+
+ when = tuesday at 05:30
+ when = TUESDAYS at 05
+
+These values for 'when' are invalid:
+
+ when = tuesday at 2am
+ when = tuesday at 2
+ when = tues at 02
+
+
REAL WORLD USAGE
================
rdiff-backup is more space efficient and featureful than using rsync +
hard links.
+
SSH KEYS
========
Note: when prompted for a password by ssh-keygen, just leave it
blank by hitting return.
+
INSTALLATION
============
eval $1='$ret'
}
+#
+# enforces very strict permissions on configuration file $file.
+#
+
+function check_perms() {
+ local file=$1
+ local perms=`ls -ld $file`
+ perms=${perms:4:6}
+ if [ "$perms" != "------" ]; then
+ fatal "Configuration files must not be group or world readable! Dying on file $file"
+ fi
+ if [ `ls -ld $file | awk '{print $3}'` != "root" ]; then
+ fatal "Configuration files must be owned by root! Dying on file $file"
+ fi
+}
+
+# simple lowercase function
+function tolower() {
+ echo "$1" | tr [:upper:] [:lower:]
+}
+
+# simple to integer function
+function toint() {
+ echo "$1" | tr [:alpha:] -d
+}
+
+#
+# function isnow(): returns 1 if the time/day passed as $1 matches
+# the current time/day.
+#
+# format is <day> at <time>:
+# sunday at 16
+# 8th at 01
+# everyday at 22
+#
+
+# we grab the current time once, since processing
+# all the configs might take more than an hour.
+nowtime=`date +%H`
+nowday=`date +%d`
+nowdayofweek=`date +%A`
+nowdayofweek=`tolower "$nowdayofweek"`
+
+function isnow() {
+ local when="$1"
+ set -- $when
+ whendayofweek=$1; at=$2; whentime=$3;
+ whenday=`toint "$whendayofweek"`
+ whendayofweek=`tolower "$whendayofweek"`
+ whentime=`echo "$whentime" | sed 's/:[0-9][0-9]$//'`
+
+ if [ "$whendayofweek" == "everyday" ]; then
+ whendayofweek=$nowdayofweek
+ fi
+
+ if [ "$whenday" == "" ]; then
+ if [ "$whendayofweek" != "$nowdayofweek" ]; then
+ whendayofweek=${whendayofweek%s}
+ if [ "$whendayofweek" != "$nowdayofweek" ]; then
+ return 0
+ fi
+ fi
+ elif [ "$whenday" != "$nowday" ]; then
+ return 0
+ fi
+
+ [ "$at" == "at" ] || return 0
+ [ "$whentime" == "$nowtime" ] || return 0
+
+ return 1
+}
#####################################################
## MAIN
getconf reportsuccess yes
getconf reportwarning yes
getconf loglevel 3
+getconf when "Everyday at 01:00"
+defaultwhen=$when
getconf logfile /var/log/backupninja.log
getconf SLAPCAT /usr/sbin/slapcat
getconf RDIFFBACKUP /usr/bin/rdiff-backup
# by default, don't make files which are world or group readable.
umask 077
+errors=0
+
for file in $configdirectory/*; do
[ -f $file ] || continue;
- perms=`ls -ld $file`
- perms=${perms:4:6}
- if [ "$perms" != "------" ]; then
- fatal "Configuration files must not be group or world readable! Dying on file $file"
- fi
- if [ `ls -ld $file | awk '{print $3}'` != "root" ]; then
- fatal "Configuration files must be owned by root! Dying on file $file"
- fi
+ check_perms $file
suffix="${file##*.}"
base=`basename $file`
if [ "${base:0:1}" == "0" ]; then
if [ -e "$scriptdir/$suffix" ]; then
setfile $file
+
+ # skip over this config if "when" option
+ # is not set to the current time.
+ getconf when "$defaultwhen"
+ IFS=$'\t\n'
+ for w in $when; do
+ IFS=$' \t\n'
+ isnow "$w"
+ ret=$?
+ IFS=$'\t\n'
+ if [ $ret == 0 ]; then
+ debug 0 "skipping $file because it is not $w"
+ continue
+ else
+ debug 0 "running $file because it is $w"
+ continue
+ fi
+ done
+ IFS=$' \t\n'
+
echo_debug_msg=1
+ # call the handler:
ret=`( . $scriptdir/$suffix $file )`
retcode="$?"
warnings=`echo $ret | grep -e "^Warning: " | wc -l`
-version 0.3.5 -- Dec 16 2004
- added reportsuccess and reportwarning config options
+version 0.4 -- Dec 26 2004
+ added "when" option, so that all configs can specify when
+ they are to be run.
+ added reportsuccess and reportwarning config options
+ added .sys handler (hardware, packages, partitions).
version 0.3.4 -- Dec 8 2004
fixed numerical variable quoting compatibility with older wc