X-Git-Url: https://hackdaworld.org/gitweb/?p=outofuni%2Fbackup.git;a=blobdiff_plain;f=bin%2Fbackup;fp=bin%2Fbackup;h=6b04a5697f93cfe229434b24c60fdbe6e743b5f7;hp=f69dfa02f70bade18eb36ddb24eb6763fe796404;hb=2e7a9906433dc6a6eab5359ad2428c8759a56afa;hpb=1886f8c05a4588aef021fec4c9868a955d4e8040 diff --git a/bin/backup b/bin/backup index f69dfa0..6b04a56 100755 --- a/bin/backup +++ b/bin/backup @@ -1,5 +1,10 @@ #!/bin/bash +function log { + conf=`basename $config | sed 's/\.config$//'` + [ "$dolog" = "1" ] && echo "`date` - $@" >> $logdir/${conf}.log +} + if [ -z "$1" ]; then echo usage: $0 configfile exit -1 @@ -13,6 +18,7 @@ fi config=$1 host=`grep ^host $config | cut -d ' ' -f 2` +aliases="`grep ^aliases $config | cut -d ' ' -f 2-`" user=`grep ^user $config | cut -d ' ' -f 2` homedirs="` grep ^homedirs $config | cut -d ' ' -f 2-`" extradirs="`grep ^extradirs $config | cut -d ' ' -f 2-`" @@ -20,21 +26,66 @@ replicas=`grep ^replicas $config | cut -d ' ' -f 2` oldest=`grep ^oldest $config | cut -d ' ' -f 2` data=`grep ^data $config | cut -d ' ' -f 2` bandwidth=`grep ^bandwidth $config | cut -d ' ' -f 2` +bwconn="`grep ^bandwidth $config | cut -d ' ' -f 3-`" +compression=`grep ^compression $config | cut -d ' ' -f 2` +compconn="`grep ^compression $config | cut -d ' ' -f 3-`" +logdir=`grep ^logdir $config | cut -d ' ' -f 2` -ping -c1 $host > /dev/null 2>&1 -ret=$? +dolog=0 +if [ ! -z "$logdir" ]; then + mkdir -p $logdir + [ -d $logdir ] && dolog=1 +fi -if [ "$ret" = "0" ]; then - echo "host $host is online ..." -else - echo "host $host unreachable ..." +hit=0 +for conn in $host $aliases; do + ping -c1 $conn > /dev/null 2>&1 + ret=$? + if [ "$ret" = "0" ]; then + remote=$conn + break + fi +done +if [ -z "$remote" ]; then + log "host $host ($aliases) unreachable ..." exit -3 +else + log "host $host (via $remote) is online ..." fi +comp=6 +if [ ! -z "$compression" ]; then + comp=$compression + for cpair in "$compconn"; do + ch=`echo $cpair | cut -d ':' -f 1` + if [[ "$remote" == "$ch"* ]]; then + cl=`echo $cpair | cut -d ':' -f 2` + [[ "$cl" == [0-9] ]] && comp=$cl + fi + done +fi +rcomp="-z --compress-level $comp" +log using compression level $comp ... + +bw=0 +if [ ! -z "$bandwidth" ]; then + bw=$bandwidth + for bwpair in "$bwconn"; do + ch=`echo $bwpair | cut -d ':' -f 1` + if [[ "$remote" == "$ch"* ]]; then + bwl=`echo $cpair | cut -d ':' -f 2` + [ ! -z "$bwl" ]] && bw=$bwl + fi + done +fi +rbw="--bandwidth=$bw" +log applying bandwidth of $bw ... + if [ ! -d $data ]; then - echo "no data directory ..." + log no data directory ... exit -4 fi +log backing up to $data ... today=`date -I` backupdir=$data/${user}_at_${host} @@ -51,6 +102,7 @@ for pb in $backupdir/[0-9]*; do if [ "$pb" != "$cbd" ]; then rm -rf $cbd mv $pb $cbd + log continuing $pb as $cbd ... fi rsrc="" @@ -61,10 +113,18 @@ for pb in $backupdir/[0-9]*; do for dir in $extradirs; do rsrc="$rsrc :$dir" done - $rsync $user@$host$rsrc $cbd + [ ! -z "$homedirs" ] && \ + log backing up home directories $homedirs ... + [ ! -z "$extradirs" ] && \ + log backing up directories $extradirs ... + $rsync $user@$remote$rsrc $cbd ret=$? - [ "$ret" != "0" ] && exit -50 + if [ "$ret" != "0" ]; then + log backup terminated before completion ... + exit -50 + fi touch $backupdir/.$pb + log "backup completed :)" fi ob="$ob $pb" done @@ -73,7 +133,7 @@ cob=`echo $ob | wc -w` if [ $cob -gt $replicas ]; then ((numdel=cob-replicas)) todel="`echo $ob | cut -d ' ' -f 1-${numdel}`" - echo "to delete: $todel" + log to delete: $todel #for dirdel in $todel; do # bdd=`basename $dirdel` # rm -r $dirdel