【轉載】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&
相關文章
相關標籤/搜索