基于inotify-tools和rsync实现文件实时同步

基于inotify-tools和rsync实现文件实时同步

前言

  • 系统:centos 7

  • inotify-tools版本:3.14(3.22版本测试有问题,所以找的比较旧的一版)

  • 主机IP:

    • 192.168.137.7(服务端,接收同步文件
    • 192.168.137.8(客户端,发送同步文件)
  • github下载inotify-tools的源码压缩

  • 需求:客户端的/home/testpath目录和服务端的/home/testpath同步。客户端目录有变动时,同步复制到服务端

  • 流程逻辑:inotify-tools基于linux的inotify事件,监听文件是否有发生增删改查,如果有,就通过rsync将文件发到另一台服务器

编译安装inotify

  1. 安装依赖
yum install -y autoconf automake libtool make gcc gcc-c++ make
  1. 客户端解压,编译,安装
tar xf inotify-tools-3.14.tar.gzcd inotify-tools-3.14./autogen.sh./configure --prefix=/home/apps/inotify-toolsmakemake install# inotifywait: 仅执行阻塞,等待inotify事件# inotifywatch: 收集关于被监视文件系统的统计数据
  1. 两台主机都安装rsync
yum install -y rsync
  1. 服务端编辑rsync配置文件 /etc/rsyncd.conf
uid = rootgid = rootusechroot = nomax connections = 20timeout = 600pid file = /var/run/rsyncd.pidlock file = /var/run/rsync.locklog file = /var/log/rsyncd.log[testpath]path = /home/testpathignore errorsread only = falsewriteonly = falselist = falsehosts allow = 192.168.137.8auth users = backusersecrets file = /etc/rsync.pass
  1. 编辑用户文件 /etc/rsync.pass,编辑完成后修改权限:chmod 600 /etc/rsync.pass
backuser:123
  1. 客户端编辑 /etc/rsync.pass,编辑完成后修改权限:chmod 600 /etc/rsync.pass
123
  1. 客户端测试rsync传输
rsync -a --progress /home/tmp/* backuser@192.168.137.7::testpath --password-file=/etc/rsync.pass
  1. 编辑inotify.sh脚本
#!/bin/bash# 避免空变量set -u# 待同步目录src=/home/testpath# 监听修改、删除、添加、改属性事件/home/apps/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -emodify,delete,create,attrib $src | while read filedorsync -zrtopg --progress $src/* backuser@192.168.137.7::testpath --password-file=/etc/rsync.passecho "$(date) rsync event occur" >> /home/scripts/inotify.log 2>&1done
  1. 赋予可执行权限并运行
chmod +x inotify.sh./inotify.sh &
  1. 测试两台服务器之间是否能实时同步

补充

-h: 帮助信息-m: 接收到事件时不退出默认接收到一个事件后即退出-r: 监视一个目录下的所有子目录-q: 安静模式-e: 指定监听的事件-timefmt: 指定时间格式,用于format的%T--format: 指定输出格式%T: 时间格式%f: 发生事件的文件%w: 发生事件的目录%e: 发生的事件
  • inotifywait可监听事件,配合-e选项
access: 文件读取modify: 文件修改attrib: 文件属性修改,如时间、权限delete: 文件或目录删除create: 文件或目录创建
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部