f69dfa02f70bade18eb36ddb24eb6763fe796404
[outofuni/backup.git] / bin / backup
1 #!/bin/bash
2
3 if [ -z "$1" ]; then
4         echo usage: $0 configfile
5         exit -1
6 fi
7
8 if [ ! -f $1 ]; then
9         echo configfile $1 is not a file
10         exit -2
11 fi
12
13 config=$1
14
15 host=`grep ^host $config | cut -d ' ' -f 2`
16 user=`grep ^user $config | cut -d ' ' -f 2`
17 homedirs="` grep ^homedirs $config | cut -d ' ' -f 2-`"
18 extradirs="`grep ^extradirs $config | cut -d ' ' -f 2-`" 
19 replicas=`grep ^replicas $config | cut -d ' ' -f 2`
20 oldest=`grep ^oldest $config | cut -d ' ' -f 2`
21 data=`grep ^data $config | cut -d ' ' -f 2`
22 bandwidth=`grep ^bandwidth $config | cut -d ' ' -f 2`
23
24 ping -c1 $host > /dev/null 2>&1
25 ret=$?
26
27 if [ "$ret" = "0" ]; then
28         echo "host $host is online ..."
29 else
30         echo "host $host unreachable ..."
31         exit -3
32 fi
33
34 if [ ! -d $data ]; then
35         echo "no data directory ..."
36         exit -4
37 fi
38
39 today=`date -I`
40 backupdir=$data/${user}_at_${host}
41
42 cbd=$backupdir/$today
43 mkdir -p $cbd
44
45 rsync="rsync -azR --delete --bwlimit=$bandwidth"
46
47 ob=""
48 for pb in $backupdir/[0-9]*; do
49         bdd=`basename $pb`
50         if [ ! -f $backupdir/.$bdd ]; then
51                 if [ "$pb" != "$cbd" ]; then
52                         rm -rf $cbd
53                         mv $pb $cbd
54                 fi
55
56                 rsrc=""
57                 for dir in $homedirs; do
58                         rsrc="$rsrc :/home/$user/$dir"
59                 done
60                 rsrc="`echo $rsrc | sed 's/^\ //'`"
61                 for dir in $extradirs; do
62                         rsrc="$rsrc :$dir"
63                 done
64                 $rsync $user@$host$rsrc $cbd
65                 ret=$?
66                 [ "$ret" != "0" ] && exit -50
67                 touch $backupdir/.$pb
68         fi
69         ob="$ob $pb"
70 done
71
72 cob=`echo $ob | wc -w`
73 if [ $cob -gt $replicas ]; then
74         ((numdel=cob-replicas))
75         todel="`echo $ob | cut -d ' ' -f 1-${numdel}`"
76         echo "to delete: $todel"
77         #for dirdel in $todel; do
78         #       bdd=`basename $dirdel`
79         #       rm -r $dirdel
80         #       rm $backupdir/$bdd
81         #done
82 fi
83
84 exit 0