前言

  • 系统: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.gz
cd inotify-tools-3.14
./autogen.sh
./configure --prefix=/home/apps/inotify-tools
make
make install
# inotifywait: 仅执行阻塞,等待inotify事件
# inotifywatch: 收集关于被监视文件系统的统计数据
  1. 两台主机都安装rsync
yum install -y rsync
  1. 服务端编辑rsync配置文件 /etc/rsyncd.conf
uid = root
gid = root
usechroot = no
max connections = 20
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log [testpath]
path = /home/testpath
ignore errors
read only = false
writeonly = false
list = false
hosts allow = 192.168.137.8
auth users = backuser
secrets 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 file
do
rsync -zrtopg --progress $src/* backuser@192.168.137.7::testpath --password-file=/etc/rsync.pass
echo "$(date) rsync event occur" >> /home/scripts/inotify.log 2>&1
done
  1. 赋予可执行权限并运行。
chmod +x inotify.sh
./inotify.sh &
  1. 测试两台服务器之间是否能实时同步

补充

  • inotifywait选项
-h: 帮助信息
-m: 接收到事件时不退出。默认接收到一个事件后即退出
-r: 监视一个目录下的所有子目录
-q: 安静模式
-e: 指定监听的事件
-timefmt: 指定时间格式,用于format的%T
--format: 指定输出格式
%T: 时间格式
%f: 发生事件的文件
%w: 发生事件的目录
%e: 发生的事件
  • inotifywait可监听事件,配合-e选项
access: 文件读取
modify: 文件修改
attrib: 文件属性修改,如时间、权限
delete: 文件或目录删除
create: 文件或目录创建

基于inotify-tools和rsync实现文件实时同步的更多相关文章

  1. rsync+inotify-tools文件实时同步

    rsync+inotify-tools文件实时同步案例 全量备份 Linux下Rsync+sersync实现数据实时同步完成. 增量备份 纯粹的使用rsync做单向同步时,rsync的守护进程是运行在 ...

  2. rsync+inotify 实现服务器之间目录文件实时同步(转)

    软件简介: 1.rsync 与传统的 cp. tar 备份方式相比,rsync 具有安全性高.备份迅速.支持增量备份等优点,通过 rsync 可 以解决对实时性要求不高的数据备份需求,例如定期的备份文 ...

  3. Rsync+sersync文件实时同步

    一.为什么要用Rsync+sersync架构1.sersync是基于Inotify开发的,类似于Inotify-tools的工具2.sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改 ...

  4. rsync + inotify 打造多server间文件实时同步

    在上篇文章ssh无password登陆server的基础之上.能够利用rsync + Inotify 在多server间实现文件自己主动同步. 例如以下測试机基于三台server做的.内网IP分别例如 ...

  5. Linux服务器间文件实时同步的实现

    使用场景 现有服务器A和服务器B,如果服务器A的指定目录(例如 /home/paul/rsync/ )中的内容发生变更(增删改和属性变更),实时将这些变更同步到服务器B的目标目录中(例如 /home/ ...

  6. (转)Linux下通过rsync与inotify(异步文件系统事件监控机制)实现文件实时同步

    Linux下通过rsync与inotify(异步文件系统事件监控机制)实现文件实时同步原文:http://www.summerspacestation.com/linux%E4%B8%8B%E9%80 ...

  7. inotify用法简介及结合rsync实现主机间的文件实时同步

    一.inotify简介 inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系 ...

  8. Centos 6.5 rsync+inotify 两台服务器文件实时同步

    rsync和inotify是什么我这里就不在介绍了,有专门的文章介绍这两个工具. 1.两台服务器IP地址分别为: 源服务器:192.168.1.2 目标服务器:192.168.1.3 @todo:从源 ...

  9. Rsync + inotify 实现文件实时同步

    Rsync 用来实现触发式的文件同步. Inotify-tools是一套组件,Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取.删除.移动等 ...

  10. rsync+inotify百万级文件实时同步

    实验环境:Centos7.4 目的:将源服务器的文件实时同步至目标服务器 源服务器:10.11.1.107 目标服务器:10.11.1.106 分别在两个节点安装rsync yum -y instal ...

随机推荐

  1. Python NumPy 广播(Broadcast)

    广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 如果两个数组 a 和 b 形状相同,即满足 a.shape == ...

  2. sh: vue-cli-service: command not found

    mac环境下运行vue项目报错sh: vue-cli-service: command not found 解决方法:cd到项目目录下,执行命令sudo rm -rf node_modules pac ...

  3. 2023-04-25:给定两个长度为N的数组,a[]和b[] 也就是对于每个位置i来说,有a[i]和b[i]两个属性 i a[i] b[i] j a[j] b[j] 现在想为了i,选一个最

    2023-04-25:给定两个长度为N的数组,a[]和b[] 也就是对于每个位置i来说,有a[i]和b[i]两个属性 i a[i] b[i] j a[j] b[j] 现在想为了i,选一个最好的j位置, ...

  4. 2020-10-28:go中,好几个go程,其中一个go程panic,会产生什么问题?

    福哥答案2020-10-28: 1.运行时恐慌,当panic被抛出异常后,如果我们没有在程序中添加任何保护措施的话,程序就会打印出panic的详细情况之后,终止运行.2.有panic的子协程里的def ...

  5. drf——Request源码分析、序列化组件、序列化类的使用(字段类和参数)、反序列化校验和保存

    1.Request类源码分析 # APIView+Response写个接口 # 总结: 1.新的request有个data属性,以后只要是在请求body体中的数据,无论什么编码格式,无论什么请求方式 ...

  6. 执行pod setup 报错error: RPC failed; curl 18 transfer closed with outstanding read data remainin

    执行pod setup 报错 error: RPC failed; curl 18 transfer closed with outstanding read data remaining fatal ...

  7. es笔记六之聚合操作之指标聚合

    本文首发于公众号:Hunter后端 原文链接:es笔记六之聚合操作之指标聚合 聚合操作,在 es 中的聚合可以分为大概四种聚合: bucketing(桶聚合) mertic(指标聚合) matrix( ...

  8. Linux系统基础知识与自学方法

    Linux系统基础知识与自学方法 大部分非计算机相关的朋友也经常使用电脑,所以我们频繁接触的是Windows系统.关于这个系统的评价不一,一部分人觉得简洁快捷,一部分人觉得问题(病毒.弹窗)多多,总之 ...

  9. 快速上手kettle(四)壶中可以倒出些啥?

    目录 前言 一 .kettle 这壶里能倒出啥? 二 .Access输出 2.1 Access输出设置 2.2 启动转换,查看输出 三 .Excel输出 3.1 选择excel扩展名 3.2 1 将表 ...

  10. 使用Docker将Vite Vue项目部署到Nginx二级目录

    Vue项目配置 使用Vite创建一个Vue项目,点我查看如何创建 配置打包路径 在Nginx中如果是二级目录,例如/web时,需要设置线上的打包路径 在项目跟路径下创建两个文件:.env.produc ...