4 conf=`basename $config | sed 's/\.conf$//'`
5 [ "$dolog" = "1" ] && echo "`date` - $@" >> $logdir/${conf}.log
9 echo usage: $0 configfile
14 echo configfile $1 is not a file
20 host=`grep ^host $config | cut -d ' ' -f 2`
21 aliases="`grep ^aliases $config | cut -d ' ' -f 2-`"
22 user=`grep ^user $config | cut -d ' ' -f 2`
23 homedirs="` grep ^homedirs $config | cut -d ' ' -f 2-`"
24 extradirs="`grep ^extradirs $config | cut -d ' ' -f 2-`"
25 replicas=`grep ^replicas $config | cut -d ' ' -f 2`
26 oldest=`grep ^oldest $config | cut -d ' ' -f 2`
27 data=`grep ^data $config | cut -d ' ' -f 2`
28 bandwidth=`grep ^bandwidth $config | cut -d ' ' -f 2`
29 bwconn="`grep ^bandwidth $config | cut -d ' ' -f 3-`"
30 compression=`grep ^compression $config | cut -d ' ' -f 2`
31 compconn="`grep ^compression $config | cut -d ' ' -f 3-`"
32 logdir=`grep ^logdir $config | cut -d ' ' -f 2`
35 if [ ! -z "$logdir" ]; then
37 [ -d $logdir ] && dolog=1
41 for conn in $host $aliases; do
42 ping -c1 $conn > /dev/null 2>&1
44 if [ "$ret" = "0" ]; then
49 if [ -z "$remote" ]; then
50 log "host $host ($aliases) unreachable ..."
53 log "host $host (via $remote) is online ..."
57 if [ ! -z "$compression" ]; then
59 for cpair in "$compconn"; do
60 ch=`echo $cpair | cut -d ':' -f 1`
61 if [[ "$remote" == "$ch"* ]]; then
62 cl=`echo $cpair | cut -d ':' -f 2`
63 [[ "$cl" == [0-9] ]] && comp=$cl
67 rcomp="-z --compress-level $comp"
68 log using compression level $comp ...
71 if [ ! -z "$bandwidth" ]; then
73 for bwpair in "$bwconn"; do
74 ch=`echo $bwpair | cut -d ':' -f 1`
75 if [[ "$remote" == "$ch"* ]]; then
76 bwl=`echo $cpair | cut -d ':' -f 2`
77 [ ! -z "$bwl" ]] && bw=$bwl
82 log applying bandwidth of $bw ...
84 if [ ! -d $data ]; then
85 log no data directory ...
88 log backing up to $data ...
91 backupdir=$data/${user}_at_${host}
96 rsync="rsync -azR --delete --bwlimit=$bandwidth"
100 for pb in $backupdir/[0-9]*; do
102 if [ ! -f $backupdir/.$bdd ]; then
103 if [ "$pb" != "$cbd" ]; then
106 log continuing $pb as $cbd ...
108 if [ ! -z "$lpb" ]; then
111 log "starting backup $today from $lpb ..."
113 log starting backup from scratch ...
121 if [ ! -f $backupdir/.$today ]; then
123 for dir in $homedirs; do
124 rsrc="$rsrc :/home/$user/$dir"
126 rsrc="`echo $rsrc | sed 's/^\ //'`"
127 for dir in $extradirs; do
130 [ ! -z "$homedirs" ] && \
131 log backing up home directories $homedirs ...
132 [ ! -z "$extradirs" ] && \
133 log backing up directories $extradirs ...
134 $rsync $user@$remote$rsrc $cbd
136 if [ "$ret" != "0" ]; then
137 log backup terminated before completion ...
141 touch $backupdir/.$today
142 log "backup $today completed :)"
144 log backup $bdd found completed ...
147 [ -z "$replicas" ] && replicas=3
148 [ -z "$oldest" ] && oldest=0
150 cob=`echo $ob | wc -w`
151 if [ $cob -gt $replicas ]; then
152 ((numdel=cob-replicas))
153 todel="`echo $ob | cut -d ' ' -f 1-${numdel}`"
154 for dirdel in $todel; do
155 past=`basename $dirdel`
156 ns=`date --date="$today" +%s`
157 ps=`date --date="$past" +%s`
158 ((delta=(ns-ps)/86400))
159 if [ $delta -gt $oldest ]; then
160 log "deleting $dirdel ($delta days old) ..."
161 bdd=`basename $dirdel`
165 log "keeping $dirdel ($delta days old) ..."