X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=backupninja;h=a105a5bf3eef7cc06b2d0d141828d03d1bcf73fa;hb=5c2b8dfe6b803749fef0bcd84e03d049536b658b;hp=fb625245b293cd0ab606237c2608ab2d01ac4184;hpb=2ae95a499aaf03ccb8d6c5ccb30167f21cac1fc1;p=matthijs%2Fupstream%2Fbackupninja.git diff --git a/backupninja b/backupninja index fb62524..a105a5b 100755 --- a/backupninja +++ b/backupninja @@ -143,7 +143,6 @@ function getconf() { # replace * with %, so that it is not globbed. ret="${ret//\\*/__star__}" - ret="${ret//\*/__star__}" # this is weird, but single quotes are needed to # allow for returned values with spaces. $ret is still expanded @@ -160,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 } @@ -200,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 @@ -268,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 @@ -308,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" @@ -318,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" @@ -348,6 +353,7 @@ 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 @@ -360,6 +366,7 @@ while [ $# -ge 1 ]; do singlerun=$2 processnow=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 @@ -367,6 +374,7 @@ while [ $# -ge 1 ]; do ;; *) debug=1 + echo "Unknown option $1" fatal "Unknown option $1" usage exit @@ -382,10 +390,22 @@ done ## 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) @@ -399,20 +419,35 @@ 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 getconf MYSQLDUMP /usr/bin/mysqldump getconf GZIP /bin/gzip getconf RSYNC /usr/bin/rsync +getconf vservers no +getconf VSERVERINFO /usr/sbin/vserver-info +getconf VSERVER /usr/sbin/vserver +getconf VROOTDIR `$VSERVERINFO info SYSINFO |grep vserver-Rootdir | awk '{print $2}'` + +if [ ! -d "$configdirectory" ]; then + echo "Configuration directory '$configdirectory' not found." + fatal "Configuration directory '$configdirectory' not found." +fi -[ -d "$configdirectory" ] || fatal "Configuration directory '$configdirectory' not found." +[ -f "$logfile" ] || touch $logfile if [ "$UID" != "0" ]; then echo "$0 can only be run as root" exit 1 fi +if [ "$VSERVERS" = "yes" -a ! -d $VROOTDIR ]; then + echo "vservers option set in config, but $VROOTDIR is not a directory!" + fatal "vservers option set in config, but $VROOTDIR is not a directory!" +fi + ## Process each configuration file # by default, don't make files which are world or group readable. @@ -428,7 +463,7 @@ errormsg="" if [ "$singlerun" ]; then files=$singlerun else - files=`find $configdirectory -mindepth 1 ` + files=`find $configdirectory -mindepth 1 | sort -n` fi for file in $files; do