【转载】CentsOS系统inotify实时监控服务器文件(夹)定制事件处理程序

原始博文和参考博文php

一、CentsOS系统inotify实时监控服务器文件html

二、Linux中让进程在后台运行的方法linux

三、linux inotify 监控文件系统事件 很是好c++

 

方法一git


说明:github

服务器系统:CentOSweb

文件目录:/home/web/osyunwei.comshell

实现目的:centos

当/home/web/osyunwei.com下面除过cache目录以外,任何文件发生变化时,记录日志并保存。服务器

具体操做:

1、安装Inotify-tools工具

一、查看服务器内核是否支持inotify

ll /proc/sys/fs/inotify #列出文件目录,出现下面的内容,说明服务器内核支持inotify

-rw-r--r-- 1 root root 0 Mar 7 02:17 max_queued_events

-rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_instances

-rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_watches

备注:Linux下支持inotify的内核最小为2.6.13,能够输入命令:uname -a查看内核

CentOS 5.X 内核为2.6.18,默认已经支持inotify

 二、安装inotify-tools

yum install make gcc gcc-c++ #安装编译工具

inotify-tools下载地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

上传inotify-tools-3.14.tar.gz到/usr/local/src目录下

cd /usr/local/src

tar zxvf inotify-tools-3.14.tar.gz #解压

cd inotify-tools-3.14 #进入解压目录

./configure --prefix=/usr/local/inotify #配置

make #编译

make install #安装

三、设置系统环境变量,添加软链接

echo "PATH=/usr/local/inotify/bin:$PATH" >>/etc/profile.d/inotify.sh

source /etc/profile.d/inotify.sh #使设置当即生效

echo "/usr/local/inotify/lib" >/etc/ld.so.conf.d/inotify.conf

ln -s /usr/local/inotify/include /usr/include/inotify

四、修改inotify默认参数(inotify默认内核参数值过小)

查看系统默认参数值

sysctl -a | grep max_queued_events

结果是:fs.inotify.max_queued_events = 16384

sysctl -a | grep max_user_watches

结果是:fs.inotify.max_user_watches = 8192

sysctl -a | grep max_user_instances

结果是:fs.inotify.max_user_instances = 128

修改参数:

sysctl -w fs.inotify.max_queued_events="99999999"

sysctl -w fs.inotify.max_user_watches="99999999"

sysctl -w fs.inotify.max_user_instances="65535"

vi /etc/sysctl.conf #添加如下代码

fs.inotify.max_queued_events=99999999

fs.inotify.max_user_watches=99999999

fs.inotify.max_user_instances=65535

:wq! #保存退出

参数说明:

max_queued_events:

inotify队列最大长度,若是值过小,会出现"** Event Queue Overflow **"错误,致使监控文件不许确

max_user_watches:

要同步的文件包含多少目录,能够用:find /home/www.osyunwei.com -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/home/www.osyunwei.com为同步文件目录)

max_user_instances:

每一个用户建立inotify实例最大值

2、建立实时监控脚本

mkdir -p /home/inotify #建立目录

vi /home/inotify/inotif.sh #编辑

#!/bin/sh

/usr/local/inotify/bin/inotifywait -mrq -e modify,create,move,delete --fromfile '/home/inotify/excludedir' --timefmt '%y-%m-%d %H:%M' --format '%T %f %e'

/home/web/osyunwei.com/ >> /tmp/rsync.txt

:wq! #保存退出

vi /home/inotify/excludedir #编辑

/home/web/osyunwei.com/

@/home/web/osyunwei.com/cache/ #排除的目录

:wq! #保存退出

chmod +x /home/inotify/inotif.sh #添加执行权限

vi /etc/rc.d/rc.local #编辑,在最后添加一行,开机自动执行

sh /home/inotify/inotif.sh

:wq! #保存退出

若是/home/web/osyunwei.com/目录下面有任何文件发送变化,/tmp/rsync.txt文件中都会记录。

至此,Linux下用inotify-tool实时监控服务器文件完成。

方法二

inotify-tools是linux下经过inotify机制监控文件变化的命令行工具,可实时监控服务器文件变化并记录,若是服务器出现问题可协助查找缘由,安装要求内核大于2.6.13。

查看服务器是否符合安装要求:


uname -a
Linux centos5.7-x64 2.6.18-274.17.1.el5


ll /proc/sys/fs/inotify/
-rw-r--r-- 1 root root 0 05-15 01:12 max_queued_events
-rw-r--r-- 1 root root 0 05-15 01:12 max_user_instances
-rw-r--r-- 1 root root 0 05-15 01:12 max_user_watches

服务器若有安装EPEL源可以使用yum安装:


yum install inotify-tools

编译安装:


cd /usr/local/src/
wget --no-check-certificate https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar zxvf inotify-tools-3.14.tar.gz 
cd inotify-tools-3.14
./configure
make
make install
ldconfig -v

inotify相关参数:


/proc/sys/fs/inotify/max_queued_events  #请求events数的最大值
/proc/sys/fs/inotify/max_user_instances #每一个user可建立的instances数量上限
/proc/sys/fs/inotify/max_user_watches   #可监控的目录最大数
inotifywait是一个监控等待事件,可配合shell实时监控记录文件系统,经常使用参数:


--timefmt 时间格式
%y年 %m月 %d日 %H小时 %M分钟
--format 输出格式
%T时间 %w路径 %f文件名 %e状态
-m 始终保持监听状态,默认触发事件即退出。
-r 递归查询目录
-q 打印出监控事件
-e 定义监控的事件,可用参数:
open   打开文件
access 访问文件
modify 修改文件
delete 删除文件
create 新建文件
attrb  属性变动
应用示例:
实时监控wwwroot目录下新建或修改的文件并输出:
 
inotifywait -mrq -e modify,create --timefmt '%y-%m-%d %H:%M' --format '%T %f %e' /home/wwwroot/

输出以下:
 
12-05-14 20:43 favicon.ico
12-05-14 20:43 favicon.ico
12-05-14 20:43 tab_console_down.gif
12-05-14 20:43 tab_console_down.gif
12-05-14 20:43 tab_graphs.gif
12-05-14 20:43 tab_graphs.gif

 

我采用方法二,参考博文2 后台执行。

监控文件没有问题,可是我想让监控外修改监控目录下文件的权限,修改 inotif.sh

#!/bin/sh

/usr/local/inotify/bin/inotifywait -mrq -e modify,create,move,delete --fromfile '/www/web/everyday_interval/excludedir' --timefmt '%y-%m-%d %H:%M' --format '%T %f %e' /www/web/default/ >> /www/web/everyday_interval/rsync.txt
chown webwww.users /www/web/default/ -R 

#保证 webwww 对当前目录的全部权限  
webwww_path='/www/web/default'
cd $webwww_path  #转到 webwww 默认网站根目录
chown webwww.users * -R  #赋予权限

监控记录正常,可是修改目录权限不行!后有参考博文:linux inotify 监控文件系统事件中的方法自定义事件处理脚本 修改后 inotif.sh以下

 

/usr/local/inotify/bin/inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %f %e' -e modify,create,move,delete /www/web/default | while read  date time file event 
do
      case $event in
          MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)
                  chown webwww.users /www/web/default/ -R  #echo $event'-'$file
                  echo $event'-'$file>>/www/web/everyday_interval/rsync.txt
              ;;
          MOVED_FROM|MOVED_FROM,ISDIR|DELETE|DELETE,ISDIR)
                chown webwww.users /www/web/default/ -R  #echo $event'-'$file  echo $event'-'$file
                echo $event'-'$file>>/www/web/everyday_interval/rsync.txt
              ;;
      esac
done

 后台执行:

/www/web/everyday_interval/inotif.sh&
相关文章
相关标签/搜索