inotify事件监控工具,一看就会

#inotify事件监控工具

标签(空格分隔):vip资料,付费查看


[TOC]

inotify简介

inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系统的变化如文件修改、新增、删除等,
inotify既可以监控文件,也可以监控目录。当监控目录时,它可以同时监控目录及目录中的各子目录及文件的。

rsync + inotify 组合

Rsync(remote sync)远程同步工具,通过rsync可以实现对远程服务器数据的增量备份同步,但rsync自身也有瓶颈,同步数据时,rsync采用核心算法对远程服务器的目标文件进行比对,只进行差异同步。如果服务器的文件数量达到了百万千万量级,那么文件对比将是非常耗时的。而且发生变化的往往是其中很少的一部分,这是非常低效的方式。inotify的出现,可以缓解rsync不足之处,取长补短。

参数说明

inotifywait命令参数说明

参数说明
-r --recursive递归查询目录
-q --quiet打印很少的信息,仅仅打印监控事件的信息
-m,–monitor始终保持事件监听状态,永远监控
–exclude排除文件或目录时,不区分大小写。
–timefmt指定时间输出的格式,后常用的参数是%d %m %y %H %M
–format指定输出信息的格式
-e,–event通过此参数可以指定需要监控的事件
-d,–daemon后台运行,以守护进程方式运行

inotify事件信息参数

-e :–event的各种事件含义

Events说明
access文件或目录被读取
modify文件或目录内容被修改
attrib文件或目录属性被改变
close文件或目录封闭,无论读/写模式
open文件或目录被打开
moved_to文件或目录被移动至另外一个目录
move文件或目录被移动到另一个目录或从另一个目录移动至当前目录
create文件或目录被创建在当前目录
delete文件或目录被删除
umount文件系统被卸载

–format参数说明

参数说明
%e显示触发事件信息
%w显示监控目录信息
%f触发事件数据信息
%w显示被监控文件的文件名

部署inotify

1.本地yum仓库里没有包,需要下载epel源,我用的是阿里的

[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-archive-6.repo

[root@localhost ~]# ls /etc/yum.repos.d/
CentOS-Base.repo  epel.repo
下完成后,在/etc/ym.repos.d可以看到epel.repo文件

1.2重新加载缓存

[root@localhost ~]# yum makecache

1.3yum安装

[root@localhost ~]# yum -y install inotify-tools

[root@localhost ~]# which inotifywait
/usr/bin/inotifywait
查看命令,安装成功

测试inotify事件监控工具

本地测试

1.xshell连接一台虚机,打开两个窗口。测试create

在一个窗口输入命令,开始监控/aaa
[root@localhost aaa]# inotifywait -qrm --timefmt '%y %m %d %H %M' --format '%T %w %f' -e create /aaa

在第二个窗口创建文件
[root@localhost aaa]# touch {1..5}.jpg

此时第一个窗口会提示以下内容
[root@localhost aaa]# inotifywait -qrm --timefmt '%y %m %d %H %M' --format '%T %w %f' -e create /aaa
22 11 21 08 48 /aaa/ 1.jpg
22 11 21 08 48 /aaa/ 2.jpg
22 11 21 08 48 /aaa/ 3.jpg
22 11 21 08 48 /aaa/ 4.jpg
22 11 21 08 48 /aaa/ 5.jpg

参数解释:
-q:打印很少的信息,仅仅打印监控事件的信息
-m:始终保持事件监听状态
-r:递归查询目录
--timefmt:指定时间输出的格式	
--format: 指定输出信息的格式
create:文件或目录被创建在当前目录

1.2测试delete

第一个窗口输入命令,开始监控/aaa目录
[root@localhost aaa]# inotifywait -qrm --timefmt '%y %m %d %H %M' --format '%T %w %f' -e delete /aaa

第二个窗口删除/aaa里的东西
[root@localhost aaa]# rm -rf *

此时第一个窗口提示以下内容
[root@localhost aaa]# inotifywait -qrm --timefmt '%y %m %d %H %M' --format '%T %w %f' -e delete /aaa
22 11 21 10 22 /aaa/ 1.jpg
22 11 21 10 22 /aaa/ 2.jpg
22 11 21 10 22 /aaa/ 3.jpg
22 11 21 10 22 /aaa/ 4.jpg
22 11 21 10 22 /aaa/ 5.jpg

1.3测试close_write

在第一个窗口操作
[root@localhost ~]# inotifywait -qrm --timefmt '%y %m %d %H %M' --format '%T %w %f' -e close_write /aaa

在第二个窗口操作
[root@localhost aaa]# touch 111
[root@localhost aaa]# echo 2222  > 111 
[root@localhost aaa]# cp 111 222

此时第一个窗口会提示
[root@localhost ~]# inotifywait -qrm --timefmt '%y %m %d %H %M' --format '%T %w %f' -e close_write /aaa
22 11 21 10 31 /aaa/ 111
22 11 21 10 31 /aaa/ 111
22 11 21 10 32 /aaa/ 222

总结:close_write中,移动,改名字,删除不会提示
一般用create,delete,close_write这三个选项

2.编写inotify脚本

[root@localhost www]# vim inotify.sh 

#!/bin/bash
#2000-11-21
#inotify本地实时监控脚本
/usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete /aaa | while read line
do
        if [ -f $line ];then
                /usr/bin/rsync -az $line /tmp --delete  &> /dev/null
        else
                /usr/bin/rsync -az /aaa/ /tmp --delete  &> /dev/null
        fi
done

shell特殊语句:while read line  配合管道符号,接收管道符传递的数据。并进行复制   “管道符的数据” 赋值给 变量 line

编写inotify+rsync远程监控脚本

#!/bin/bash
backup_Server=192.168.200.162
/usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /aaa  | while read line  
do
    if [ -f $line ];then
                rsync -az $line --delete rsync_backup@$backup_Server::backup --password-file=/etc/rsync.password
        else

        rsync -az /aaa/  --delete rsync_backup@$backup_Server::backup --password-file=/etc/rsync.password
    fi
done

脚本可以加入开机启动:
echo "/bin/sh /www/inotify.sh &" >> /etc/rc.local

提示:& 从后台开始运行该条命令。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值