使用rsync+shell+expect同步目录

最近线上机器经常需要对目录进行同步,如果用rsync的模块方式很不方便,每次同步目录的时候还要改变模块指定的目录,如果要分别同步的目录比较多就有点郁闷了。

但是rsync如果不是运行在daemon形式,即没有server端时,可以指定远端目录和本地目录的(rsync的几种运行模式之一),因此可以考虑使用shell脚本中的特殊变量$1和$2来分别指定远端目录和本地目录。

使用这种模式时,远端服务器要新建相关的可登陆账号,并设定密码,使用shell时,还是需要输入密码。。如果同步的比较多的话。。输入密码就让人崩溃了。。。还好。Linux下有一个超强的可以实现自动输入的编程工具 expect!真是个好东西。。。尤其是可以和shell相互引用。。。爽啊。。。

以下为我的脚本内容:

Shell脚本:

[root@client bin]# less rsync_pull

#!/bin/bash

#this script is for rsync!

#set –x     #shell的调试命令。。粉有用啊。。。

source /usr/local/src/boyo_tools/etc/rsync_pull.conf #使用source来引用配置文件,source其实和”.”相同,就是把指定shell中的变量引用到此shell中

 

rsync -i -rlptDvz -H --progress --delete $USER@$IPADD:$1 $2   #没有使用a参数,因为拉取过来要改变属组和属主,其中$1和$2对应了远端目录和本地目录  

#set +x

 

Source引用的脚本:

[root@client bin]# less ../etc/rsync_pull.conf

#!/bin/bash

#rsync configure file!

IPADD=192.168.10.159  #远端的IP地址,以后可以直接在配置文件中改动了。还是比较方便的

#PASS_FILE="/etc/passwdfile"

USER=test   #拉取时用到的用户名

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/2c5960209b8f513446c02b591fcfb583.html