mirror of
https://0xacab.org/liberate/backupninja.git
synced 2024-09-19 23:21:40 +02:00
added scheduling (!) see readme.
This commit is contained in:
parent
8fbbbbe8d7
commit
a7bf628e61
39
README
39
README
@ -28,6 +28,7 @@ The following options are available:
|
||||
-f <file> Use <file> for the main configuration instead of
|
||||
/etc/backupninja.conf
|
||||
|
||||
|
||||
CONFIGURATION FILES
|
||||
===================
|
||||
|
||||
@ -77,6 +78,42 @@ For example:
|
||||
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
|
||||
================
|
||||
|
||||
@ -101,6 +138,7 @@ the backup server must have root on the production server, and (3)
|
||||
rdiff-backup is more space efficient and featureful than using rsync +
|
||||
hard links.
|
||||
|
||||
|
||||
SSH KEYS
|
||||
========
|
||||
|
||||
@ -117,6 +155,7 @@ user 'backup' on desthost without specifying a password.
|
||||
Note: when prompted for a password by ssh-keygen, just leave it
|
||||
blank by hitting return.
|
||||
|
||||
|
||||
INSTALLATION
|
||||
============
|
||||
|
||||
|
105
backupninja
105
backupninja
@ -133,6 +133,77 @@ function getconf() {
|
||||
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
|
||||
@ -195,6 +266,8 @@ getconf reportemail
|
||||
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
|
||||
@ -213,17 +286,12 @@ debug 1 "====== starting at "`date`" ======"
|
||||
# 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
|
||||
@ -235,7 +303,28 @@ for file in $configdirectory/*; do
|
||||
|
||||
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`
|
||||
|
@ -1,5 +1,8 @@
|
||||
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
|
||||
|
@ -1,2 +1,2 @@
|
||||
# cron job for backupninja (once a day)
|
||||
00 01 * * * root if [ -x /usr/sbin/backupninja -a -f /etc/backupninja.conf ]; then /usr/sbin/backupninja; fi
|
||||
# cron job for backupninja (every hour, on the hour)
|
||||
00 * * * * root if [ -x /usr/sbin/backupninja -a -f /etc/backupninja.conf ]; then /usr/sbin/backupninja; fi
|
||||
|
Loading…
Reference in New Issue
Block a user