Improve docs.
[wizbackup.git] / wizbackup-driver
index abda39ef496ef905794755a4dc3064f54ccacc6d..957571cb757ed9f3a2857ffd5677b75dcb54bfa7 100755 (executable)
@@ -1,6 +1,6 @@
 #!/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
@@ -17,9 +17,9 @@
 #  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."
@@ -27,12 +27,12 @@ then
 fi
 
 HOSTS=`cat $1 | egrep -v '^#|^ *$'`
+DEST="$2"
 
 LOGGROUP=`basename $1`
 LOGDIR=/var/log/wizbackup
 LOCKDIR=/var/lock/wizbackup
-EXCLUDES_DIR=/root/rsync-backups/exclude
-DEST=/backup
+EXCLUDES_DIR="$DEST/EXCLUDE"
 
 today=`date +"%Y%m%d"`
 mkdir -p $LOGDIR
@@ -40,25 +40,34 @@ mkdir -p $LOCKDIR
 
 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):$host:$(($end_time-$start_time)):$result"
-       echo $report >>$LOGDIR/$LOGGROUP-report-$today.log
-       [ $result != 0 ] && echo "$report" >>$LOGDIR/$LOGGROUP-fail-$today.log
+       report="$(date +%s):$host:$(($end_time-$start_time)):$result"
+       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