0 环境
| IP | 用途 | OS |
|---|---|---|
| 192.168.2.21 | rsync-server | centos7.3 |
| 192.168.2.22 | rsync-client | centos7.3 |
1 rsync server
常安装于 备份服务器
# rsyncd 编辑配置文件vim /etc/rsyncd.confuid=rootgid=rootmax connections=4log file=/var/log/rsyncd.logpid file=/var/run/rsyncd.pidlock file=/var/run/rsyncd.locksecrets file=/etc/rsyncd_users.db # 指定rsync 的用户密码文件[www]comment= backup webpath=/data/testread only = nohosts allow = * # 允许任意网段服务器访问此模块exclude=test # 不让哪个用户访问auth users=root # 认证用户# 如果需要对所有人都可以免密, 则注释掉secrets file, auth users
创建账户验证文件
vim /etc/rsyncd_users.dbroot:root123 # "用户名:密码"的形式# 这一步很关键,不然会报错chmod 600 /etc/rsyncd_users.db
启动服务
systemctl start rsyncd && systemctl enable rsyncd
2. rsync client
# 安装 inotify-toolsyum install -y inotify-tools# 创建rsyncd-log 目录mkdir /var/log/rsyncd/# 编辑监听脚本,内容如下mkdir -p /usr/local/scripts/ -pvim /usr/local/scripts/user-inotify.shchmod +x /usr/local/scripts/user-inotify.sh
#!/bin/bashHOST=192.168.2.21 # 远程主机的IPSVN_SRC=/data/test/ # 远程目录WEB_SRC=/data/test/ # 本地目录PASSWD=/etc/rsyncd/root.pwd # 在文件中指定你的密码,DES=www # rsync-server 端的标签USER=root # rsync-server 所定义的用户DATE=`date +%F`RSYNC_LOGFILE=/var/log/rsyncd/${DATE}-rsync.loginotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib ${WEB_SRC} | while read filedorsync -aH --delete --progress ${WEB_SRC} ${USER}@${HOST}::${DES} --password-file=${PASSWD} && echo "${file} rsync succesed" >> ${RSYNC_LOGFILE} 2>&1if [ $? -ne 0 ];thenecho "remote rsync failed" >> ${RSYNC_LOGFILE};fiecho "-----------------------------------END-------------------------------------" >> ${RSYNC_LOGFILE} 2>&1;done
关键的一步:如下 :
echo root123 > /etc/rsyncd/root.pwdchmod 600 /etc/rsyncd/root.pwd
再说一次 : 本文中所有密码文件的权限一定要设为 600 权限。
测试一下:
bash -x user-inotify.shecho test-page > /data/test/test-page.txt# 去 rsync-server 上对应的目录看一眼,是否同步过去# 如果没问题# 写一个定时任务echo * * * * * /usr/local/scripts/user-inotify.sh > /var/spool/cron/root
3 参考文档
- [配置rsync+inotify实现站点文件实时同步]: https://www.linuxidc.com/Linux/2018-08/153719.htm
