• rsync + inotify 同步数据


    rsync

    1.安装rsync包
    yum install rsync
    2.两种工作模式
    2.1.本地
    rsync -r /var/www/image/ /var/www/test/
    2.2.远程
    rsync -r /var/www/test/ root@192.168.56.102:/var/www/test/

    rsync -r root@192.168.56.102:/var/www/test/ /var/www/test/
    3.两种认证协议
    3.1.ssh认证
    rsync -r /var/www/test/ root@192.168.56.102:/var/www/test/
    3.2.rsync 协议认证
    3.2.1.配置账号密码文件(远程)
    echo -e "image:123456\ntest:123456" > /etc/rsyncd.passwd
    chmod 600 /etc/rsyncd.passwd
    3.2.2.修改配置文件 /etc/rsyncd.conf(远程)

    # /etc/rsyncd: configuration file for rsync daemon mode
    uid = root
    gid = root
    log file = /var/log/rsyncd.log
    pid file = /var/run/rsyncd.pid
    
    [image]
    path = /var/www/image/
    # https://download.samba.org/pub/rsync/rsyncd.conf.5#auth_users
    auth users = image
    # https://download.samba.org/pub/rsync/rsyncd.conf.5#secrets_file
    secrets file = /etc/rsyncd.passwd
    # 此参数确定客户端是否能够上传文件。如果“只读”为真,则任何尝试上传都将失败。如果“只读”为假,则如果守护程序端的文件权限允许上传,则可以上传。默认情况下所有模块都是只读的。请注意,“ auth users ”可以基于每个用户覆盖此设置。
    read only = false
    
    [test]
    path = /var/www/test/
    # https://download.samba.org/pub/rsync/rsyncd.conf.5#auth_users
    auth users = test
    # https://download.samba.org/pub/rsync/rsyncd.conf.5#secrets_file
    secrets file = /etc/rsyncd.passwd
    # 此参数确定客户端是否能够上传文件。如果“只读”为真,则任何尝试上传都将失败。如果“只读”为假,则如果守护程序端的文件权限允许上传,则可以上传。默认情况下所有模块都是只读的。请注意,“ auth users ”可以基于每个用户覆盖此设置。
    read only = false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    3.2.3.开启 rsyncd 服务(远程)
    systemctl start rsyncd
    3.2.4.配置密码文件实现无需手动输入密码(本地)
    echo 123456 > /etc/rsync.image.passwd
    chmod 600 /etc/rsync.image.passwd

    echo 123456 > /etc/rsync.test.passwd
    chmod 600 /etc/rsync.test.passwd
    3.2.5.请求同步(本地)
    rsync -r /var/www/image/ image@192.168.56.101::image
    也可以使用 url 格式语法:
    rsync -r /var/www/image/ rsync://image@192.168.56.101/image

    inotify

    1.安装inotify-tools包
    yum install inotify-tools

    rsync + inotify

    1.创建脚本文件 /var/www/inotify_rsync.sh(本地)

    #!/bin/bash 
    # 本地被监控目录
    watch_dir=/var/www/image/
    # 虚拟用户               
    user="image"
    # 虚拟用户密码                    
    export RSYNC_PASSWORD=123456
    # 远程模块名      
    module="image"
    # 远程主机ip                   
    ip=192.168.56.101               
    # 先整体同步一次
    rsync -azc --delete ${watch_dir} ${user}@${ip}::${module}
    # 切换到被监控目录下,然后用inotifywait监控./目录,这样后期就可以用-R选项同步新增的子目录
    cd $watch_dir  
    /usr/bin/inotifywait -mrq --timefmt '%Y-%m-%d %H:%M:%S' --format '%w%f:%Xe:%T' -e create,delete,modify,move,attrib,close_write ./ \
    --exclude=".*.swp" | \
    while read line
    do
        # $line的输出format为:文件路径:事件:时间
        # 获取文件的绝对路径
        FILE=$(echo $line | awk -F: '{print $1}')  
        # 获取监控的事件
        EVENT=$(echo $line | awk -F: '{print $2}') 
        # 监控到对文件的下述行为后,只把文件同步到远端
        if [[ $EVENT =~ 'CREATE' ]] || [[ $EVENT =~ 'MODIFY' ]] || [[ $EVENT =~ 'CLOSE_WRITE' ]] || [[ $EVENT =~ 'MOVED_TO' ]] || [[ $EVENT =~ 'ATTRIB' ]];then
            rsync -azcR ${FILE} ${user}@${ip}::${module}
        fi    
        # 监控到涉及到目录的改动,将目录同步到远端,例如用dirname ${FILE}获取目录
        if [[ $EVENT =~ 'DELETE' ]] || [[ $EVENT =~ 'MOVED_FROM' ]];then
            rsync -azcR --delete $(dirname ${FILE}) ${user}@${ip}::${module} &>/dev/null
        fi
    done &
    # 末尾的&符号,代表在子shell中提交命令,这样进程的ppid就变为1,当前窗口关闭,该进程依然存活
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    2.创建/usr/lib/systemd/system/inotify_rsync.service开机自启文件(本地)

    [Unit]
    Description=inotify_rsync
    Wants=network-online.target
    [Service]
    User=root
    Type=forking
    ExecStart=/usr/bin/bash /var/www/inotify_rsync.sh start
    ExecStop=/usr/bin/bash /var/www//inotify_rsync.sh stop
    SuccessExitStatus=143
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=inotify_rsync
    [Install]
    WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3.创建日志配置文件 /etc/rsyslog.d/inotify_rsync.conf(本地)

    if $syslogtag contains 'inotify_rsync' then /var/log/inotify_rsync.log
    if $syslogtag contains 'inotify_rsync' then stop
    
    • 1
    • 2

    4.启动(本地)
    systemctl start inotify_rsync

  • 相关阅读:
    AD域控批量导入和批量删除脚本
    基于QT的指挥猫猫打架玩耍的小游戏设计
    项目经理如何进行项目汇报才能让项目顺利进行,让领导一看就喜欢?
    feign 配置使用
    MATLAB程序设计:牛顿迭代法
    MATLAB | 世界杯来用MATLAB画个足球玩叭~
    35个MySQL常见面试题+答案
    前端 JS 经典:ES6 和 CommonJs 用法
    企业微信自建应用 网页授权登录 获取用户信息
    四十九.强化学习基础
  • 原文地址:https://blog.csdn.net/weixin_42315393/article/details/126598163