现在的位置: 首页 > 教程分享 > 正文

使用inotify-tools实现数据实时同步

2017年06月15日 教程分享 ⁄ 共 2257字 ⁄ 字号 暂无评论

inotify-tools是一款监控文件系统事件的小工具,最大优点是配置简单,易于上手!inotify-tools一般用于Rsync的服务端模式,需要提前配置好Rsync服务端,请先参考这篇文章:Linux下搭建配置Rsync服务器

实验环境说明

花郎是使用VMware虚拟机做实验,两台主机的操作系统均为CentOS 6.5;一台是主机A(Wanghualang-A),IP地址为192.168.168.68,作为Rsync服务端;另一台是主机B(Wanghualang-B),IP地址为192.168.168.69,作为Rsync客户端。注意,本次实验全部操作均在B机完成。

第一步 安装软件

安装inotify-tools软件包,并确保安装成功;

注意,CentOS默认Yum源里是没有inotify-tools软件包,需要自行安装EPEL Yum源。

  1. [root@Wanghualang-B ~]# wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm  
  2. [root@Wanghualang-B ~]# rpm -ivh epel-release-6-8.noarch.rpm  
  3. [root@Wanghualang-B ~]# yum -y install inotify-tools  
  4. [root@Wanghualang-B ~]# rpm -qa | grep inotify-tools  

软件官网:https://github.com/rvoicilas/inotify-tools/wiki

第二步 监听目录

通过一条命令实时监控客户端上某个目录的数据变化,这个可以按需定义,比如下面这条命令就是监控文件创建、文件修改、文件删除、文件变更权限,一旦文件发生了这四种行为,终端就会提示某某文件有变化;

  1. [root@Wanghualang-B ~]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e attrib,modify,create,delete /data/rsync/  

顺便附上完整监控命令,具体也可以自行查看inotifywait的man手册;

  1. [root@Wanghualang-B ~]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e access,modify,attrib,close_write,close_nowrite,close,open,moved_to,moved_from,move,create,delete,delete_self,unmount /data/rsync/  

扩展参数知识

  1. access:文件读取;  
  2. modify:文件更改;  
  3. attrib:文件属性更改,如权限,时间戳等;  
  4. close_write:以可写模式打开的文件被关闭,不代表此文件一定已经写入数据;  
  5. close_nowrite:以只读模式打开的文件被关闭;  
  6. close:文件被关闭,不管它是如何打开的;  
  7. open:文件打开;  
  8. moved_to:一个文件或目录移动到监听的目录,即使是在同一目录内移动,此事件也触发;  
  9. moved_from: 一个文件或目录移出监听的目录,即使是在同一目录内移动,此事件也触发;  
  10. move:包括 moved_to 和 moved_from;  
  11. move_self:文件或目录被移除,之后不再监听此文件或目录;  
  12. create:文件或目录创建;  
  13. delete:文件或目录删除;  
  14. delete_self:文件或目录移除,之后不再监听此文件或目录;  
  15. unmount:文件系统取消挂载,之后不再监听此文件系统。  

第三步 编写脚本

当监听目录内的数据发生变化时,客户端要主动同步数据到Rsync服务端,一般可以写Shell脚本来实现:

  1. [root@Wanghualang-B ~]# vim inotify.sh  

脚本内容:

  1. #!/bin/bash  
  2. /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e attrib,modify,create,delete /data/rsync/ | while read file  
  3. do  
  4. rsync -avz /data/rsync/ wanghualang@192.168.168.68::Wanghualang_Backup --password-file=/etc/rsyncd.password  
  5. done  

赋予脚本执行权限;

  1. [root@Wanghualang-B ~]# chmod 755 inotify.sh  

执行脚本

  1. [root@Wanghualang-B ~]# ./inotify.sh  

第四步 测试同步

打开一个新的命令终端,先在B机的/data/rsync目录下创建一个文件,再到A机的/data/rsync目录查看是否同步成功。

  1. [root@Wanghualang-B ~]# touch /data/rsync/Wanghualang.txt  
  2. [root@Wanghualang-A ~]# ls /data/rsync  

给我留言

留言无头像?

×