使用inotify实现实时文件同步的shell脚本

转载 2015年07月08日 18:55:38


inotify是一个API,需要通过开发应用程序进行调用,对于大多数用户来讲这有着许多不便,inotify-tools的出现弥补了这一不足。
inotify-tools是一套组件,它包括一个C库和几个命令行工具,这些命令行工具可用于通过命令行或脚本对某文件系统的事件进行监控。它由Rohan McGovern开发,其项目网址为http://inotify-tools.sourceforge.net

首先运行以下命令安装inotify-tools
sudo apt-get install inotify-tools  ##debian/ubuntu系统
sudo yum install inotify-tools      ##redhat/CentOS/fedora

inotify-tools提供的两个命令行工具:

inotifywait:通过inotify API等待被监控文件上的相应事件并返回监控结果,默认情况下,正常的结果返回至标准输出,诊断类的信息则返回至标准错误输出。它可以在监控到对应监控对象上指定的事件后退出,也可以进行持续性的监控。

inotifywatch:通过inotify API收集被监控文件或目录的相关事件并输出统计信息。

inotifywait命令使用简介:

inotifywait尤其适用于在脚本中等待某事件的发生,并可基于特定的事件执行相应操作。如将其用于脚本中监控某指定目录中的文件上的修改、新建、删除、属性信息的改变,而后使用rsync命令将某事件对应的文件同步至其它主机上。其常用选项如下:

-m, --monitor:inotifywait的默认动作是在监控至指定文件的特定事件发生一次后就退出了,而使用此选项则可实现持续性的监控;

-r, --recursive:递归监控指定目录下的所有文件,包括新建的文件或子目录;如果要监控的目录中文件数量巨大,则通常需要修改/proc/sys/fs/inotify/max_users_watchs内核参数,因为其默认值为8192。

-e <event>, --event <event>:指定要监控的特定事件,默认是监控所有的事件;此处<event>包括access, modify, attrib, close_write, close_nowirte, close, open, moved_to, moved_from, move, create, delete, delete_selt等;

--timefmt <fmt>:当在--format选项中使用%T时,--timefrt选项则可以用来指定自定义的符合strftime规范的时间格式,此时间格式可用的格式符可以通过strftime的手册页获取;--timefrt后常用的参数是'%d/%m/%y %H:%M';

--format <fmt>:自定义inotifywait的输出格式,如--format '%T %w %f';常用的格式符如下:

%w:显示被监控文件的文件名;

%f:如果发生某事件的对象是目录,则显示被监控目录的名字;默认显示为空串;

%T:使用--timefmt选项中自定义的时间格式;

例如,要监控/tmp/test目录及其内部所有文件上发生的create,delete,modify,close_write事件,则使用如下命令:

# inotify -r --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e create,delete,modify,close_write /tmp/test

此命令在监控到某文件上第一次事件后就会退出,如果想一直监控,则需要为命令添加-m选项。

 
#!/bin/bash  
src=/data/www/
dest=/tmp/

/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src |  while read file 
do  
      /usr/bin/rsync -arzuq  --progress $src $dest 
      echo "  ${file} was rsynced" >>/tmp/rsync.log 2>&1  
done

linux inotify 监控文件系统事件

1. Inotify 机制概述 1.1. Inotify 介绍 在日常的运维过程中,经常需要备份某些文件,或者对系统的某些文件进行监控,比如重要的配置文件等。如果需要作到实时同步或者监控,就需要使...
  • chengfangang
  • chengfangang
  • 2014年11月13日 10:53
  • 1862

linux下inotify操作

linux下inotify操作
  • chenglinhust
  • chenglinhust
  • 2014年10月15日 11:20
  • 1108

使用inotify实现实时文件同步shell脚本

inotify.sh #!/bin/bash src=/data/www/ /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %...
  • 5iasp
  • 5iasp
  • 2013年03月26日 09:04
  • 1357

inotify

1.下载 inotify  http://pan.baidu.com/s/1hrr2LoC 2.解压 inotify tar xvf inotify-tools.tar 3.将 inotify...
  • lyj1101066558
  • lyj1101066558
  • 2016年03月03日 19:42
  • 217

linux 监视文件系统inotify 测试

一、简介 Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。您还可以跟踪活动的源头和目标等细节。在实际项目中,如...
  • hepeng597
  • hepeng597
  • 2012年07月27日 14:36
  • 8222

Inotify: 高效、实时的Linux文件系统事件监控框架

在日常工作中,人们往往需要知道在某些文件(夹)上都有那些变化,比如: 通知配置文件的改变跟踪某些关键的系统文件的变化监控某个分区磁盘的整体使用情况系统崩溃时进行自动清理自动触发备份进程向服务器上...
  • L_yangliu
  • L_yangliu
  • 2013年08月22日 10:09
  • 5210

linux中的inotify

监控文件系统变化
  • wangcg123
  • wangcg123
  • 2016年10月27日 16:40
  • 215

linux inotifywait

inotify
  • Fybon
  • Fybon
  • 2017年03月31日 14:25
  • 1021

Inotify: 高效、实时的Linux文件系统事件监控框架

在日常工作中,人们往往需要知道在某些文件(夹)上都有那些变化,比如: 通知配置文件的改变跟踪某些关键的系统文件的变化监控某个分区磁盘的整体使用情况系统崩溃时进行自动清理自动触发备份进程向服务器上...
  • skp127
  • skp127
  • 2016年07月28日 15:51
  • 985

使用inotifywait同步修改的文件到服务器

一般我们会用sshfs把服务器的目录挂载到本地,如果用IDE直接在挂载目录上开发,会非常慢。如果把代码checkout到本地,使用IDE开发,然后把代码复制到服务器运行,当项目目录比较大的时候也是比较...
  • zzmfish
  • zzmfish
  • 2015年09月28日 17:32
  • 1510
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用inotify实现实时文件同步的shell脚本
举报原因:
原因补充:

(最多只允许输入30个字)