1. 创建配置文件
配置文件为不存在需要自己新建
mkdir /etc/rsyncd touch /etc/rsyncd/rsyncd.conf #主配置文件; touch /etc/rsyncd/rsyncd.secrets #用户名密码配置文件; touch /etc/rsyncd/rsyncd.motd #连接时提示信息 chmod 600 /etc/rsyncd/rsyncd.secrets #将密码权限修改,增加安全性 echo "wys:123456" >> /etc/rsyncd/rsyncd.secrets #写入账号和密码,注意这里的账号必须是系统账号,而密码是自定义密码 vim /etc/rsyncd/rsyncd.conf uid = root #运行rsync的用户 gid = root #运行rsync的用户组 use chroot = yes #是否chroot到访问目录 max connections = 4 #最大并发数 port = 873 #运行端口 #motd file = /etc/rsyncd/rsyncd.motd #连接时提示信息 log file = /var/log/rsyncd.log #指定保存日志文件 pid file = /var/run/rsyncd.pid #运行Pid文件 [wys] #模块名称 path = /tmp/test #同步目录 comment = a test #注释 ignore errors #忽略--delete导致的I/O错误 hosts allow = 192.168.1.0/24 #该模块允许IP hosts deny = 0.0.0.0/32 #该模块禁止的IP auth users = wys #该模块认证的用户 secrets file = /etc/rsyncd/rsyncd.secrets #登陆用户名密码
2.创建启动脚本
[root@xfwy shell]# vim rsyncd.py
#!/usr/bin/env python
# chkconfig: 35 24 96
#
# Author: Eason Wang
# Contact: wangyishuai007@gmail.com
#
# Date: 2015.11.10
# Ver: 1.0
# Use:
# cp rsyncd.py /etc/init.d/rsyncd
# chkconfig --add rsyncd
# service rsyncd [start|stop|restart|reload]
# Config: /etc/rsyncd/rsyncd.conf
#
# Exit code:
# 0 ==> EXIT_SUCCESS
# 1 ==> EXIT_FAILURE
import sys,os,commands,getopt,signal
rsync = '/usr/bin/rsync'
CFILE = '/etc/rsyncd/rsyncd.conf'
PFILE = '/var/run/rsyncd.pid'
prog = 'rsync'
daemon = "%s --daemon --config=%s" % (rsync,CFILE)
PROCESS = os.popen("ps -ef | grep rsync | grep -v 'grep' | awk '{print $2}'").read().split('\n')[0]
if os.path.exists(PFILE):
RPFILE = open(PFILE).read().strip()
else:
RPFILE = ''
def start():
if not os.path.exists(rsync):
print "FATAL: No such programme"
sys.exit(1)
if not os.path.exists(CFILE):
print "FATAL: config file does not exist"
sys.exit(1)
print "start %s:" % prog
if os.path.exists(PFILE):
if PROCESS == RPFILE:
print "%s is runing!" % prog
else:
try:
os.remove(PFILE)
except:
print "[ERROR] pid file Delete failed, Please check!"
else:
print "Delete the pid file..."
start()
else :
a,b = commands.getstatusoutput(daemon)
if a !=0 :
print b
sys.exit(1)
print "[OK]"
def stop():
print "stop %s:" % prog
try:
os.kill(int(RPFILE), signal.SIGKILL)
except (IOError, ValueError):
print "%s is not runing!" % prog
else:
if os.path.exists(PFILE):
try:
os.remove(PFILE)
except:
print "[ERROR] pid file Delete failed, Please check!"
else:
print "Delete the pid file..."
stop()
else:
print "[OK]"
if __name__ == '__main__':
arg = sys.argv[1:]
if len(sys.argv[1:]) > 1:
print "Too many arguments! Only one!"
sys.exit(0)
if not arg :
print "You must enter parameters!"
sys.exit(0)
if 'start' in arg:
start()
sys.exit(0)
elif 'stop' in arg:
stop()
sys.exit(0)
elif 'restart' in arg or 'reload' in arg:
stop()
start()
sys.exit(0)
else:
print "only supports the following parameters: [start|stop|restart|reload]"
自己最近学python,就当练习了,写写还是发现,这种脚本用shell写着简单~
然后配置chkconfig
cp rsyncd.py /etc/init.d/rsyncd chkconfig --add rsyncd
启动rsyncd服务
[root@xfwy shell]# service rsyncd start start rsync: [OK]
3.客户端连接
rsync -avzP wys@192.168.1.98::wys /tmp/test #格式是user@hostname/IP::Module 最后是同步到本地的文件夹 说明: -a 参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件; -z 传输时压缩; -P 传输进度; -v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
简单介绍其它同步参数
rsync -avzP --delete wys@192.168.1.98::wys /tmp/test #表示客户端上的数据要与服务器端完全一致,如果目录中有服务器上不存在的文件,则删除. rsync -avzP --delete --password-file=/root/rsync.password wys@192.168.1.98::wys /tmp/test #这是当我们以wys用户登录rsync服务器同步数据时,密码将读取 rsync.password 这个文件,文件保存为纯密码 即echo "123456" > /root/rsync.password
转载于:https://blog.51cto.com/coolk/1711543