服务端安装

1、安装rsync
yum -y install rsync
2、配置/etc/rsyncd.conf文件

uid = backup
gid = backup
port = 873
use chroot = yes
read only = no
list = no
#允许登录IP
hosts allow = ip
hosts deny = *
max connections = 10
timeout = 900
fake super = yes
[backup]
comment = this is module for backup
path = /app/backup/
ignore errors
#新增用户名
auth users = backup
secrets file = /etc/rsyncd.pwd

3、新建/etc/rsyncd.pwd,写入用户名:密码
4、修改/etc/rsyncd.pwd权限为chmod 600
5、新建backup用户
useradd -s /sbin/nologin -m backup
6、给目录授权
chown backup:backup /app/backup
7、启动服务systemctl start rsyncd

安装客户端

yum -y install rsyncd
新建密码文件etc/rsyncd.password
rsync -avzcR --password-file=/etc/rsyncd.password /root/* 用户名@目标地址::模块名称

通过变化更新文件脚本

#!/bin/bash
src=/app/cloudreve
des=cloudreve
rsync_passwd_file=/etc/rsyncd.passwd
ip1=ip
user=cloudreve
cd ${src}
/usr/local/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file
do
        INO_EVENT=$(echo $file | awk '{print $1}')
        INO_FILE=$(echo $file | awk '{print $2}')
        echo "-------------------------------$(date)------------------------------------"
        echo $file
        #增加、修改、写入完成、移动进事件
        #增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。
        if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]
        then
                echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
                rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}  # INO_FILE变量代表路径哦  -c校验文件内容
                 #仔细看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})变量 即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极端环境下会漏文件 现在可以在不漏文件下也有不错的速度 做到平衡) 然后用-R参数把源的目录结构递归到目标后面 保证目录结构一致性
        fi
        #删除、移动出事件
        if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
        then
                echo 'DELETE or MOVED_FROM'
                rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}
                #看rsync命令 如果直接同步已删除的路径${INO_FILE}会报no such or directory错误 所以这里同步的源是被删文件或目录的上一级路径,并加上--delete来删除目标上有而源中没有的文件,这里不能做到指定文件删除,如果删除的路径越靠近根,则同步的目录月多,同步删除的操作就越花时间。这里有更好方法的同学,欢迎交流。
        fi
        #修改属性事件 指 touch chgrp chmod chown等操作
        if [[ $INO_EVENT =~ 'ATTRIB' ]]
        then
                echo 'ATTRIB'
                if [ ! -d "$INO_FILE" ]
                then
                        rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}
                fi
        fi
done
最后修改:2021 年 06 月 07 日
如果觉得我的文章对你有用,请随意赞赏