博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux:rsync + inotifywait 实现【准实时】同步
阅读量:7180 次
发布时间:2019-06-29

本文共 1014 字,大约阅读时间需要 3 分钟。

直接上脚本

#!/bin/bashexport PATH=./sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:$PATHsrc=/tmp1#dest=root@192.168.0.18::destdes=/tmp2#CMD="rsync -avzcR --password-file=/etc/rsyncd.passwd"CMD="rsync -avzcR --delete"LASTFILE=ABCcd ${src} || exit 1inotifywait -mrq --format  '%,e %w%f' -e create,delete,modify,attrib,close_write,move ./ | while read filedo    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/bashexport PATH=.:/bin:$/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbinbase=/tmp/inotifywait -mr --format '%w%f %e'  ${base} | while read eventdo        echo ${event}         # 操作redis执行缓存存储,后续处理        echo redis-cli hset ${base} ${event}         redis-cli hset ${base} ${event}done

 

转载地址:http://xbszm.baihongyu.com/

你可能感兴趣的文章
java_对象序列化、反序列化
查看>>
例说学习方法的改造和提升
查看>>
将XmlDocument转化String,将String转化为 XmlDocument
查看>>
Java 字节码
查看>>
字符串匹配算法-KMP
查看>>
Spring事务管理
查看>>
CCF NOI2019获奖规则
查看>>
安装.NET Core遇到的错误
查看>>
asp.net页面事件执行顺序(转)
查看>>
vue2.X 自定义 侧滑菜单 组件
查看>>
返回对象时字典化
查看>>
解决sqoop连接mysq错误
查看>>
QT 修改QTableWidget表头
查看>>
lamp环境应用实践
查看>>
The Fifth Day 总结
查看>>
【风马一族_Python】 安装pip与Numpy
查看>>
Lazy Load, 延迟加载图片的 jQuery 插件[转]
查看>>
System.exit(0)和System.exit(1)区别
查看>>
序列化流与反序列化流、打印流、commons
查看>>
JavaScript中的面向对象
查看>>