4 ###############################################################
6 # This handler slowly creates a backup of each user's maildir
7 # to a remote server. It is designed to be run with low overhead
8 # in terms of cpu and bandwidth so it runs pretty slow.
10 ##############################################################
20 getconf srcdir /var/maildir
30 [ -d $srcdir ] || fatal "source directory $srcdir doesn't exist"
32 [ ! $test ] || testflags="--dry-run -v"
33 rsyncflags="$testflags -e 'ssh -p $destport'"
34 flags_mail="$rsyncflags --archive --ignore-existing --delete --numeric-ids --size-only --bwlimit=$speedlimit"
35 flags_folders="$rsyncflags --archive --delete --numeric-ids"
36 excludes='--exclude ".Trash/*" --exclude ".Mistakes/*" --exclude ".Spam/*"'
39 debug "ssh -o PasswordAuthentication=no $desthost -l $destuser 'echo -n 1'"
41 result=`ssh -o PasswordAuthentication=no $desthost -l $destuser 'echo -n 1' 2>&1`
42 if [ "$result" != "1" ]; then
43 fatal "Can't connect to $desthost as $destuser."
47 ##################################################################
50 function do_letters() {
51 for i in a b c d e f g h i j k l m n o p q r s t u v w x y z; do
52 do_maildirs "$srcdir/$i"
56 function do_maildirs() {
58 [ -d $dir ] || fatal "directory $dir not found."
59 for userdir in `ls -1 $dir`; do
66 local letter=${user:0:1}
67 local dir="$srcdir/$letter/$user"
68 [ -d $dir ] || fatal "maildir $dir not found".
71 load=`uptime | sed 's/^.*load average: \\([^,]*\\).*$/\\1/'`
72 if [ $load -lt $loadlimit ]; then
73 info "load $load, sleeping..."
80 cmd="rsync $maildirrsyncflags $excludes '$dir' '$destuser@$desthost:$destdir/maildir/$letter'"
82 # ret=`rsync $maildirrsyncflags $excludes '$dir' '$destuser@$desthost:$destdir/maildir/$letter' 2>&1`
85 # remove any maildirs from backup which might have been deleted
86 # and add new ones which have just been created.
88 function do_remove() {
89 local tmp1=/tmp/maildirtmpfile$$
90 local tmp2=/tmp/maildirtmpfile$$
92 for i in a b c d e f g h i j k l m n o p q r s t u v w x y z; do
93 ls -1 "$srcdir/$i" | sort > $tmp1
94 ssh -p $destport $desthost 'ls -1 '$destdir/maildir/$i' | sort > $tmp2
95 for deluser in `join -v 2 $tmp1 $tmp2`; do
96 cmd="ssh -p $destport $desthost rm -vr '$destdir/maildir/$i/$deluser/'"
105 ##################################################################
107 ### ROTATE BACKUPS ###
109 if [ "$remove" == "yes" ]; then
113 ### REMOVE OLD MAILDIRS ###
115 if [ "$rotate" == "yes" ]; then
119 ### ROTATE BACKUPS ###
121 if [ "$letter" != "" ]; then
125 if [ "$user" != "" ]; then