#!/bin/bash
#
-# WizBackup Driver 1.0
+# WizBackup Driver 1.1
# Copyright 2011 Bernie Innocenti <bernie@codewiz.org>
#
# This program is free software: you can redistribute it and/or modify
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
-if [ $# -lt 1 ]
+if [ $# -lt 2 ]
then
- echo "Usage: $0 [MACHINE-TAB]"
+ echo "Usage: $0 [MACHINE-TAB] [DEST]"
echo
echo "The MACHINE-TAB file contains hostnames of machines to be backed up, one per line."
echo "Empty lines and lines starting with '#' are ignored."
fi
HOSTS=`cat $1 | egrep -v '^#|^ *$'`
+DEST="$2"
LOGGROUP=`basename $1`
LOGDIR=/var/log/wizbackup
LOCKDIR=/var/lock/wizbackup
-DEST=/backup
-EXCLUDES_DIR=$DEST/EXCLUDE
+EXCLUDES_DIR="$DEST/EXCLUDE"
today=`date +"%Y%m%d"`
mkdir -p $LOGDIR
if [ "`tty`" = "not a tty" ]; then
LOGFILE="$LOGDIR/$LOGGROUP-$today.log"
+ FAILLOG="$LOGDIR/$LOGGROUP-fail-$today.log"
+ REPORT="$LOGDIR/$LOGGROUP-report-$today.log"
else
LOGFILE=/dev/stdout
+ FAILLOG=/dev/stderr
+ REPORT=/dev/stdout
fi
for host in $HOSTS; do
- opts="--exclude-from $EXCLUDES_DIR/ALWAYS"
- if [ -f "$EXCLUDES_DIR/$host" ]; then
- opts="$opts --exclude-from $EXCLUDES_DIR/$host"
- fi
+ opts=""
+ for file in "$EXCLUDES_DIR/ALWAYS" "$EXCLUDES_DIR/$host"; do
+ [ -f $file ] && opts="$opts --exclude-from $file"
+ done
start_time=$(date +%s)
- flock $LOCKDIR/$host wizbackup "$host:/" "$DEST/$host/" $opts >>$LOGFILE 2>&1
+ flock -n $LOCKDIR/$host nice ionice -c2 -n6 \
+ wizbackup "$host:/" "$DEST/$host/" $opts >>$LOGFILE 2>&1
result=$?
end_time=$(date +%s)
report="$(date +%s):$host:$(($end_time-$start_time)):$result"
- echo $report >>$LOGDIR/$LOGGROUP-report-$today.log
- [ $result != 0 ] && echo "$report" >>$LOGDIR/$LOGGROUP-fail-$today.log
+ echo $report >>"$REPORT"
+ [ $result != 0 ] && echo "$report" >>"$FAILLOG"
done
-# TODO: send fail log email report
-# TODO: delete logs older than 45 days
+if [ -s "$FAILLOG" ]; then
+ cat "$FAILLOG"
+ exit 1
+fi
+
+# TODO: delete logs older than N days