zoukankan      html  css  js  c++  java
  • linux:rsync + inotifywait 实现【准实时】同步

    直接上脚本

    #!/bin/bash
    export PATH=./sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:$PATH
    
    src=/tmp1
    #dest=root@192.168.0.18::dest
    des=/tmp2
    #CMD="rsync -avzcR --password-file=/etc/rsyncd.passwd"
    CMD="rsync -avzcR --delete"
    LASTFILE=ABC
    
    cd ${src} || exit 1
    inotifywait -mrq --format  '%,e %w%f' -e create,delete,modify,attrib,close_write,move ./ | while read file
    do
        echo $(date) : $file
    
        EVENT=$(echo $file | awk '{print $1}')
         FILE=$(echo $file | awk '{print $2}')
    
        if [[ "${LASTFILE}" == "${FILE}" ]] ; then continue; fi
    
        ${CMD} $(dirname ${LASTFILE}) ${des}
    
        LASTFILE=${FILE}
    done

    优点:

      比网上复杂的实现简单多了:) 且兼顾了效率问题,大大减少无效同步次数

    缺点:

      如果文件系统写活动不再持续,则最后一个文件的写操作不能触发同步,可能造成问题(解决:可以起一个守护程序,定期执行一个写活动,类似心跳)

    备注:

    vi inotify.mon.jos
    
    #!/bin/bash
    export PATH=.:/bin:$/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
    
    base=/tmp/
    
    inotifywait -mr --format '%w%f %e'  ${base} | while read event
    do
            echo ${event}
    # 操作redis执行缓存存储,后续处理
    echo redis-cli hset ${base} ${event} redis-cli hset ${base} ${event} done
  • 相关阅读:
    CodeForces 785D Anton and School
    CodeForces 785C Anton and Fairy Tale
    CodeForces 785B Anton and Classes
    CodeForces 785A Anton and Polyhedrons
    爱奇艺全国高校算法大赛初赛C
    爱奇艺全国高校算法大赛初赛B
    爱奇艺全国高校算法大赛初赛A
    EOJ 3265 七巧板
    EOJ 3256 拼音魔法
    EOJ 3262 黑心啤酒厂
  • 原文地址:https://www.cnblogs.com/jinzhenshui/p/10021402.html
Copyright © 2011-2022 走看看