日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux inotifywait脚本,使用inotify/fswatch构建自动监控脚本

發布時間:2024/9/19 linux 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux inotifywait脚本,使用inotify/fswatch构建自动监控脚本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

自動告警腳本

最近項目上有這樣一個需求:系統中有一個后臺服務會不斷的生成監控日志,根據系統的運行情況,它每天會在目錄/var/alarms下生成一個文件,文件名帶有時間戳,其中內容格式如下:

$cat /var/alarms/alarms-20150228130522.csvnode,summary,occurrence,proiorityVIQ002,heartbeat failure,2/12/2015 01:23 AM,criticalVIQ002,packages are rejected,2/12/2015 01:22 AM,majorVIQ002,connection cannot be established,2/11/2015 01:23 AM,mediumVIQ001,packages are rejected,2/11/2015 01:23 AM,warningVIQ001,connection cannot be established,2/09/2015 01:23 AM,medium...

運維團隊需要監控這個目錄,如果里邊的文件發生了變化,就要及時的發送郵件給工程團隊解決。我們當然不可能人工的監控該目錄,然后編寫郵件,再拷貝粘貼,所以需要編寫一個腳本來自動化這個任務。

處理方法有兩種:

編寫一個crontab的任務,每隔五分鐘輪詢一下,然后編寫腳本來探測變化,發送郵件

使用操作系統提供的inotify相關API探測變化,編寫腳本發送郵件

不過作為程序員,第二種方法顯然更高級一些。另外相對于檢測文件變化(對比目錄樹,檢查時間戳,而且還要記錄上一次變更的狀態等),編寫一個發送郵件的腳本要簡單得多。

使用inotify

如果在Linux下,我們可以使用inotify相關的工具,你可以使用你正在使用的系統下的包管理工具來安裝。也可以直接從源碼包編譯安裝。

安裝之后,系統中就有了一個叫做inotifywait的命令,這個命令提供多個參數。默認的inotifywait在接收到指定的事件(文件變化)后,會打印信息并退出。可以使用-m參數讓inotifywati處于監聽狀態。-e參數指定需要監聽的事件類型,下面是幾個常見的事件類型:

CREATE,創建

MODIFY,修改

CLOSE_WRITE,CLOSE,寫入成功

還可以通過--format來指定事件的輸出,%w表示監控的文件名,%f表示如果被監控的對象是目錄,則當發生事件時返回文件名。比如下面的命令:

$inotifywait -m -e close_write /var/alarms --format "%w%f"

表示以監控模式(事件發生后不退出,繼續監聽),監聽close_write事件,在/var/alarms目錄上,并且輸出的格式為%w%f。

這樣我們在另一個窗口上模擬事件發生:

$touch /var/alarms/alarms-20150228130522.csv

當前的窗口就會出現/var/alarms/alarms-20150228130522.csv這樣的輸出。有了這個功能,我們只需要編寫一段簡單的腳本就可以完成上一小節中的問題了:

#!/bin/bashDIR=$1inotifywait -m -e close_write $DIR --format "%w%f" | whilereadFILEdocat ${FILE} | mail -s "Alarm: $FILE" juntao.qiu@gmail.comdone

命令mail是Linux下默認的郵件客戶端,可以完成郵件的發送功能。將上邊的腳本命名為monitor.sh,添加可執行權限,并啟動監控:

$chmod +x monitor.sh$./monitor.sh /var/alarms

這樣,當目標目錄/var/alarms發生變化后,我們就可以收到告警郵件了!

Mac OSX下使用fswatch

如果是在Mac OSX下,雖然沒有了inotify相關的API,但是我們可以使用fswatch來完成同樣的工作。

使用brew安裝fswatch:

$brew install fswatch

即可。fswatch也有很多選項,我們這里僅使用-0(表示以傳統的NUL作為字符串終結符,因為*nix下文件名可以包含任意字符,比如空格)。我們可以很容易的用xargs將檢測到的事件進行進一步的處理:

fswatch -0 /var/alarms | xargs -0 -n 1 ~/bin/send-notify.sh

其中,-0的意思與fswatch的命令中的-0一致,-n 1表示每條NUL結尾的字符串都執行一次腳本。腳本send-notify.sh的內容如下:

#!/bin/bashFILE=$1cat $FILE | mail -s "Alarm: $FILE" jutao.qiu@gmail.com

這樣,當文件發生變化時,腳本就會發送一封郵件到指定郵箱了(由于我自己的laptop的hostname不像是一個合理的主機名,所以Gmail會把這封郵件放到垃圾郵件列表中,這里只是用作示例而已)。

當然,由于腳本是我們自己可以編寫的,所以理論上當檢測到變化之后,我們可以做任何事情,比如說幾句話,播放一段音樂等。

總結

以上是生活随笔為你收集整理的linux inotifywait脚本,使用inotify/fswatch构建自动监控脚本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。