X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=backupninja;h=687571bf88e092bcda470163a0ef9875e00883e9;hb=26a57c396c75e0e782ffaf3946f6912da0ecf4ae;hp=81b1a17896412ef8eb5e8943291885b5e9ba0907;hpb=5e1f333927cb31c5eb589801b23a7ff52739d72a;p=matthijs%2Fupstream%2Fbackupninja.git diff --git a/backupninja b/backupninja index 81b1a17..687571b 100755 --- a/backupninja +++ b/backupninja @@ -31,7 +31,7 @@ function setupcolors() { } function colorize() { - if [ "$usecolor" == "yes" ]; then + if [ "$usecolors" == "yes" ]; then local typestr=`echo "$@" | sed 's/\(^[^:]*\).*$/\1/'` [ "$typestr" == "Debug" ] && type=0 [ "$typestr" == "Info" ] && type=1 @@ -58,7 +58,7 @@ function colorize() { # used to capture output from handlers echo_debug_msg=0 -usecolor=yes +usecolors=yes function printmsg() { [ ${#@} -gt 1 ] || return @@ -159,9 +159,11 @@ function check_perms() { local perms=`ls -ld $file` perms=${perms:4:6} if [ "$perms" != "------" ]; then + echo "Configuration files must not be group or world readable! Dying on file $file" fatal "Configuration files must not be group or world readable! Dying on file $file" fi if [ `ls -ld $file | awk '{print $3}'` != "root" ]; then + echo "Configuration files must be owned by root! Dying on file $file" fatal "Configuration files must be owned by root! Dying on file $file" fi } @@ -199,9 +201,9 @@ function isnow() { whendayofweek=$1; at=$2; whentime=$3; whenday=`toint "$whendayofweek"` whendayofweek=`tolower "$whendayofweek"` - whentime=`echo "$whentime" | sed 's/:[0-9][0-9]$//'` + whentime=`echo "$whentime" | sed 's/:[0-9][0-9]$//' | sed -r 's/^([0-9])$/0\1/'` - if [ "$whendayofweek" == "everyday" ]; then + if [ "$whendayofweek" == "everyday" -o "$whendayofweek" == "daily" ]; then whendayofweek=$nowdayofweek fi @@ -238,6 +240,7 @@ The following options are available: -t, --test Run in test mode, no actions are actually taken. -n, --now Perform actions now, instead of when they might be scheduled. + --run FILE Execute the specified action file and then exit. When using colored output, there are: EOF debug=1 @@ -266,6 +269,8 @@ function process_action() { getconf when "$defaultwhen" if [ "$processnow" == 1 ]; then info "running $file because of --now" + elif [ "$when" == "hourly" ]; then + debug "running $file because 'when = hourly'" else IFS=$'\t\n' for w in $when; do @@ -306,7 +311,7 @@ function process_action() { _fatals=`cat $bufferfile | grep "^Fatal: " | wc -l` ret=`grep "\(^Warning: \|^Error: \|^Fatal: \)" $bufferfile` - #rm $bufferfile + rm $bufferfile if [ $_fatals != 0 ]; then msg "*failed* -- $file" errormsg="$errormsg\n== failures from $file ==\n\n$ret\n" @@ -316,10 +321,12 @@ function process_action() { elif [ $_warnings != 0 ]; then msg "*warning* -- $file" errormsg="$errormsg\n== warnings from $file ==\n\n$ret\n" - elif [ $retcode == 0 ]; then - msg "success -- $file" else - msg "unknown -- $file" + msg "success -- $file" +# elif [ $retcode == 0 ]; then +# msg "success -- $file" +# else +# msg "unknown -- $file" fi let "fatals += _fatals" @@ -346,38 +353,59 @@ while [ $# -ge 1 ]; do if [ -f $2 ]; then conffile=$2 else + echo "-f|--conffile option must be followed by an existing filename" fatal "-f|--conffile option must be followed by an existing filename" usage fi # we shift here to avoid processing the file path shift ;; - --run) + --run) + debug=1 if [ -f $2 ]; then singlerun=$2 processnow=1 - debug=1 else + echo "--run option must be fallowed by a backupninja action file" fatal "--run option must be fallowed by a backupninja action file" usage fi shift ;; *) + debug=1 + echo "Unknown option $1" fatal "Unknown option $1" usage + exit ;; esac shift done +#if [ $debug ]; then +# usercolors=yes +#fi + ## Load and confirm basic configuration values # bootstrap -[ -r "$conffile" ] || fatal "Configuration file $conffile not found." +if [ ! -r "$conffile" ]; then + echo "Configuration file $conffile not found." + fatal "Configuration file $conffile not found." +fi + scriptdir=`grep scriptdirectory $conffile | awk '{print $3}'` -[ -n "$scriptdir" ] || fatal "Cound not find entry 'scriptdirectory' in $conffile" -[ -d "$scriptdir" ] || fatal "Script directory $scriptdir not found." +if [ ! -n "$scriptdir" ]; then + echo "Cound not find entry 'scriptdirectory' in $conffile" + fatal "Cound not find entry 'scriptdirectory' in $conffile" +fi + +if [ ! -d "$scriptdir" ]; then + echo "Script directory $scriptdir not found." + fatal "Script directory $scriptdir not found." +fi + setfile $conffile # get global config options (second param is the default) @@ -391,6 +419,7 @@ defaultwhen=$when getconf logfile /var/log/backupninja.log getconf usecolors "yes" getconf SLAPCAT /usr/sbin/slapcat +getconf LDAPSEARCH /usr/bin/ldapsearch getconf RDIFFBACKUP /usr/bin/rdiff-backup getconf MYSQL /usr/bin/mysql getconf MYSQLHOTCOPY /usr/bin/mysqlhotcopy @@ -398,7 +427,12 @@ getconf MYSQLDUMP /usr/bin/mysqldump getconf GZIP /bin/gzip getconf RSYNC /usr/bin/rsync -[ -d "$configdirectory" ] || fatal "Configuration directory '$configdirectory' not found." +if [ ! -d "$configdirectory" ]; then + echo "Configuration directory '$configdirectory' not found." + fatal "Configuration directory '$configdirectory' not found." +fi + +[ -f "$logfile" ] || touch $logfile if [ "$UID" != "0" ]; then echo "$0 can only be run as root" @@ -420,11 +454,11 @@ errormsg="" if [ "$singlerun" ]; then files=$singlerun else - files=`ls $configdirectory` + files=`find $configdirectory -mindepth 1 | sort -n` fi for file in $files; do - [ -f $file ] || continue; + [ -f "$file" ] || continue check_perms $file suffix="${file##*.}" @@ -441,7 +475,7 @@ for file in $files; do msg "*missing handler* -- $file" fi done - + ## mail the messages to the report address if [ $actions_run == 0 ]; then doit=0