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 cipher=`grep ^cipher $config | cut -d ' ' -f 2`
33 ciconn=`grep ^cipher $config | cut -d ' ' -f 3-`
34 logdir=`grep ^logdir $config | cut -d ' ' -f 2`
37 if [ ! -z "$logdir" ]; then
39 [ -d $logdir ] && dolog=1
43 for conn in $host $aliases; do
44 ping -c1 $conn > /dev/null 2>&1
46 if [ "$ret" = "0" ]; then
51 if [ -z "$remote" ]; then
52 log "host $host ($aliases) unreachable ..."
55 log "host $host (via $remote) is online ..."
59 if [ ! -z "$compression" ]; then
61 for cpair in "$compconn"; do
62 ch=`echo $cpair | cut -d ':' -f 1`
63 if [[ "$remote" == "$ch"* ]]; then
64 cl=`echo $cpair | cut -d ':' -f 2`
65 [[ "$cl" == [0-9] ]] && comp=$cl
69 rcomp="-z --compress-level $comp"
70 log using compression level $comp ...
73 if [ ! -z "$bandwidth" ]; then
75 for bwpair in "$bwconn"; do
76 ch=`echo $bwpair | cut -d ':' -f 1`
77 if [[ "$remote" == "$ch"* ]]; then
78 bwl=`echo $cpair | cut -d ':' -f 2`
79 [ ! -z "$bwl" ] && bw=$bwl
84 log applying bandwidth of $bw ...
87 if [ ! -z "$cipher" ]; then
89 for cipair in "$ciconn"; do
90 ch=`echo $cipair | cut -d ':' -f 1`
91 if [[ "$remote" == "$ch"* ]]; then
92 cl=`echo $cipair | cut -d ':' -f 2`
93 [ ! -z "$cl" ] && ciph=$cl
97 if [ ! -z "$ciph" ]; then
98 log using cipher $ciph ...
101 if [ ! -d $data ]; then
102 log no data directory ...
105 log backing up to $data ...
108 backupdir=$data/${user}_at_${host}
109 cbd=$backupdir/$today
113 for pb in $backupdir/[0-9]*; do
114 [ ! -d $pb ] && continue
116 if [ ! -f $backupdir/.$bdd ]; then
117 if [ "$pb" != "$cbd" ]; then
120 log continuing $pb as $cbd ...
129 if [ ! -d $cbd ]; then
130 if [ ! -z "$lpb" ]; then
132 log starting backup $today from $lpb ...
135 log starting backup $today from scratch ...
139 if [ ! -f $backupdir/.$today ]; then
141 for dir in $homedirs; do
142 rsrc="$rsrc :/home/$user/$dir"
144 rsrc="`echo $rsrc | sed 's/^\ //'`"
145 for dir in $extradirs; do
148 [ ! -z "$homedirs" ] && \
149 log backing up home directories $homedirs ...
150 [ ! -z "$extradirs" ] && \
151 log backing up directories $extradirs ...
153 if [ -z "$ciph" ]; then
154 rsync=(rsync -aR $rcomp --delete $rbw $user@$remote$rsrc $cbd)
156 rsync=(rsync -aR -e "ssh -c $ciph" $rcomp --delete)
157 rsync+=($rbw $user@$remote$rsrc $cbd)
162 if [ "$ret" != "0" ]; then
163 log backup terminated before completion ...
167 touch $backupdir/.$today
168 log "backup $today completed :)"
170 log backup $bdd found completed ...
173 [ -z "$replicas" ] && replicas=3
174 [ -z "$oldest" ] && oldest=0
176 cob=`echo $ob | wc -w`
177 if [ $cob -gt $replicas ]; then
178 ((numdel=cob-replicas))
179 todel="`echo $ob | cut -d ' ' -f 1-${numdel}`"
180 for dirdel in $todel; do
181 past=`basename $dirdel`
182 ns=`date --date="$today" +%s`
183 ps=`date --date="$past" +%s`
184 ((delta=(ns-ps)/86400))
185 if [ $delta -gt $oldest ]; then
186 log "deleting $dirdel ($delta days old) ..."
187 bdd=`basename $dirdel`
191 log "keeping $dirdel ($delta days old) ..."