inotify是一個API
需要通過開發應用程序進行調用,對於大多數用戶來講這有着許多不便,inotify-tools的出現彌補了這一不足。
inotify-tools是一套組件,它包括一個C庫和幾個命令行工具,這些命令行工具可用於通過命令行或腳本對某文件系統的事件進行監控。它由Rohan McGovern開發,其項目網址為http://inotify-tools.sourceforge.net。
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 :指定要監控的特定事件,默認是監控所有的事件;此處包括access, modify, attrib, close_write, close_nowirte, close, open, moved_to, moved_from, move, create, delete, delete_selt等;
--timefmt :當在--format選項中使用%T時,--timefrt選項則可以用來指定自定義的符合strftime規范的時間格式,此時間格式可用的格式符可以通過strftime的手冊頁獲取;--timefrt后常用的參數是'%d/%m/%y %H:%M';
--format :自定義inotifywait的輸出格式,如--format '%T %w %f';常用的格式符如下:
%w:顯示被監控文件的文件名;
%f:如果發生某事件的對象是目錄,則顯示被監控目錄的名字;默認顯示為空串;
%T:使用--timefmt選項中自定義的時間格式;
案例:監控mnt目錄下新生成log結尾的文件時發送告警
vim monitor.sh
#!/bin/bash
#釘釘機器人地址
webhook='https://oapi.dingtalk.com/robot/send?access_token=xxxxe7dcb54d5a9e4a2' #地址自行查閱釘釘機器人的文檔。
#文件尾綴
suffix=\.log
/usr/bin/inotifywait -mr --format '%w%f' -e create /mnt | while read file;do
echo $file|grep ${suffix}$
if [ $? -eq 0 ];then
date=`date +"%F %T"`
curl $webhook -H 'Content-Type: application/json' -d "
{
'msgtype': 'text',
'text': {
'content': '文件生成時間:${date}\n文件生成位置:${file}\n請注意\n'
},
'at': {
'isAtAll': false
}
}"
fi
done
然后后台運行即可腳本即可
nohup monitor.sh > /dev/null &

