expect与rsync 异步并行备份数据脚本

#!/bin/bash
#author:qunying.liu
#2014.08.02
#脚本用途:通过rsync从远程机器备份数据到本机机器对应目录
#脚本目录:/usr/local/scripts/,expect脚本目录:/usr/local/scripts/dsfilersync,
#备注:一个机器对应一个exp脚本,该脚本中包含该机器所有rsync同步目录。


#初始化目录
cd   /usr/local/scripts/
grep "rsync -avz" ./dsfilersync/*.exp|awk '{print $NF}' >backupdir.info
for DIR in `cat   ./backupdir.info`;
do
[ ! -d $DIR ] && mkdir -p $DIR && echo "Create Dir $DIR done !"
ls -ld $DIR
done 


#统计需要备份的机器IP到dataserver.ip文件中
 grep "rsync -avz" ./dsfilersync/*.exp|awk -F@ '{print $2}'|awk -F: '{print $1}'|sort |uniq >./dsfilersync/dataserver.ip
 

 
tmp_fifofile="/tmp/fifo.$$"  ;mkfifo "$tmp_fifofile" ;exec 6<>"$tmp_fifofile"  ;rm $tmp_fifofile  
 #通过管道文件,让expect脚本异步执行。
for ip in `cat ./dsfilersync/dataserver.ip`;do
{
echo "$ip,Begin at `date +%Y-%m-%d-%H-%M-%S`...."

#每天中午12点清空日志
if [ 12 -eq  $(date +%H) ];then
echo "">/data/scripts/logs/time$ip.log
echo "">/data/scripts/logs/datarsync$ip.log
fi


flag="`/bin/ps -ef|grep $ip.exp|grep -v grep`"
if [ -z "$flag" ];then 
  echo "$ip:Begin at `date +%Y-%m-%d-%H-%M-%S`" >> ./logs/time$ip.log
cd   /usr/local/scripts/
  ( ./dsfilersync/$ip.exp 1> ./logs/datarsync$ip.log   2>&1 && echo "$ip:Finsh at `date +%Y-%m-%d-%H-%M-%S`" >> /data/applogs/time$ip.log ) || /usr/local/scripts/MonitorAgent -f monitor -t "data rsync file from $ip failed  "  -i " rsync file failed from $ip , please check /data/applogs/datarsync$ip.log "
else
  echo "$ip: Already running...."
fi
} &
done 
wait
exec 6>&-
echo "Finsh at `date +%Y-%m-%d-%H-%M`"



$ip.exp:
#!/usr/bin/expect -f
#
expect "#"
set NDATE [exec date +%Y-%m-%d]
set TDATE [exec date -d tomorrow +%Y-%m-%d]
#set NDATE [exec date -d yesterday +%Y-%m-%d]
#set TDATE [exec date   +%Y-%m-%d]
set timeout 12000;
spawn  /usr/bin/rsync -avz --include "*.tar.gz"  --exclude "*.*"     -e  "/usr/local/bin/ssh -lqunying -p12345 -q" xiaoqiang@10.1.1.1:/data/test/welike/tmps/$TDATE /data/test/10.1.2.1/webs/tmp/
expect "password:" { send "hehe\n" ; exp_continue }