用inotifywait監(jiān)視文件變化并執(zhí)行相應(yīng)腳本

Inotify 是一個 Linux特性,它監(jiān)控文件系統(tǒng)操作粥诫,比如讀取油航、寫入和創(chuàng)建。Inotify 反應(yīng)靈敏怀浆,用法非常簡單谊囚,并且比 cron 任務(wù)的繁忙輪詢高效得多。在內(nèi)核 2.6.13 以上都可以使用执赡。

Inotify一種強大的镰踏、細粒度的沙合、異步文件系統(tǒng)監(jiān)控機制,它滿足各種各樣的文件監(jiān)控需要绊率,可以監(jiān)控文件系統(tǒng)的訪問屬性滤否、讀寫屬性、權(quán)限屬性肥惭、刪除創(chuàng)建蜜葱、移動等操作耀石,也就是可以監(jiān)控文件發(fā)生的一切變化滞伟。

inotify-tools是一個C庫和一組命令行的工作提供Linux下inotify的簡單接口。inotify-tools安裝后會得到inotifywait和inotifywatch這兩條命令:

一是 inotifywait野崇,它是用來監(jiān)控文件或目錄的變化乓梨,二是inotifywatch清酥,它是用來統(tǒng)計文件系統(tǒng)訪問的次數(shù)焰轻。

我家里安裝了一個網(wǎng)絡(luò)攝像機,用來監(jiān)控家里的的入口是否有異常蝠筑,如果有異常就會自動錄像什乙。錄像文件存放在nas服務(wù)器上稳强,為了把文件做備份,我又把錄像文件定時復制到遠程云服務(wù)器上退疫。之前是采用定時備份的模式,實時性不好褒繁。為了保證備份的實時性,我查找了linux對文件的監(jiān)控功能的資料燕差,終于發(fā)現(xiàn)了inotify-tools這個工具徒探。通過對inotify-tools的資料的學習喂窟,編寫了一個自動執(zhí)行腳本磨澡,當檢測到攝像頭保存視頻的文件夾有變動,就自動用rsync把更改的文件同步到遠程云服務(wù)器上稚字。

下面就是安裝和使用步驟:

1. 安裝inotify-tools

家里的服務(wù)安裝的是debian 10系統(tǒng)胆描,是可以直接安裝inotify-tools工具的

#apt update
#apt install inotify-tools

就是這么簡單袄友,看網(wǎng)上很多文章都寫的是從github下載.gz文件霹菊,然后解壓縮旋廷,再&……%&*&……饶碘,其實完全不用這么麻煩馒吴,就只需要上面兩行命令就完成了。

然后執(zhí)行inotifywatch --help豪治,有輸出命令說明就表明工具安裝正常,可以使用了烦衣。

#inotifywatch --help
inotifywatch 3.14
Gather filesystem usage statistics using inotify.
Usage: inotifywatch [ options ] file1 [ file2 ] [ ... ]
Options:
        -h|--help       Show this help text.
        -v|--verbose    Be verbose.
        @<file>         Exclude the specified file from being watched.
        --fromfile <file>
                Read files to watch from <file> or `-' for stdin.
        --exclude <pattern>
                Exclude all events on files matching the extended regular
                expression <pattern>.
        --excludei <pattern>
                Like --exclude but case insensitive.
        -z|--zero
                In the final table of results, output rows and columns even
                if they consist only of zeros (the default is to not output
                these rows and columns).
        -r|--recursive  Watch directories recursively.
        -t|--timeout <seconds>
                Listen only for specified amount of time in seconds; if
                omitted or 0, inotifywatch will execute until receiving an
                interrupt signal.
        -e|--event <event1> [ -e|--event <event2> ... ]
                Listen for specific event(s).  If omitted, all events are 
                listened for.
        -a|--ascending <event>
                Sort ascending by a particular event, or `total'.
        -d|--descending <event>
                Sort descending by a particular event, or `total'.

Exit status:
        0  -  Exited normally.
        1  -  Some error occurred.

Events:
        access          file or directory contents were read
        modify          file or directory contents were written
        attrib          file or directory attributes changed
        close_write     file or directory closed, after being opened in
                        writable mode
        close_nowrite   file or directory closed, after being opened in
                        read-only mode
        close           file or directory closed, regardless of read/write mode
        open            file or directory opened
        moved_to        file or directory moved to watched directory
        moved_from      file or directory moved from watched directory
        move            file or directory moved to or from watched directory
        create          file or directory created within watched directory
        delete          file or directory deleted within watched directory
        delete_self     file or directory was deleted
        unmount         file system containing file or directory unmounted

2. inotifywait使用

這里直接給出我的腳本代碼,再做一個說明吧!

#!/bin/bash
dir=/ipcam                #指定需要監(jiān)視的文件夾
log_file=/watch.log   #指定輸出信息的文件衅澈,方便后面查看
rsync_file=/xxx.sh    #發(fā)現(xiàn)文件有變化時需要執(zhí)行的腳本文件
while
inotifywait -r $dir -o $log_file -e close \       #這里只監(jiān)視文件的close動作
--timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e';
do  
         bash $rsync_file        #執(zhí)行同步文件的腳本
         sleep 10m               #等待10分鐘谬墙,如果不加這個命令,同步會非常頻繁险耀,沒必要
done

剛開始的時候因為不清楚inotifywait的執(zhí)行機制甩牺,代碼寫的太復雜,反而出現(xiàn)問題贬派,后來反復測試發(fā)現(xiàn)可以簡化搞乏,就去掉了很多不必要的命令请敦,這樣流程也很清楚储玫。
我的rsync腳本文件就是用rsync命令把視頻文件同步到云服務(wù)器上,大家自行查找rsync的相關(guān)資料匣椰,這里就不再累述端礼。

3. inotifywatch的使用

inofitywatch是用來監(jiān)控文件或文件夾的變化,并輸出統(tǒng)計信息的佳镜。
比如:

# inotifywatch /ipcam -t 300 
Establishing watches...
Finished establishing watches, now collecting statistics.
total  access  close_nowrite  open  filename
51     25      13             13    /ipcam/

這里監(jiān)控了5分鐘時間,總共出現(xiàn)了51次文件變更贫奠,其中access 25次唤崭,close_nowrite 13次脖律,open 13次,結(jié)果清晰明了芦疏。

4. 最后微姊,也是最重要的一點兢交,設(shè)置開機啟動腳本

#crontab -e

然后添加下面一行

@reboot /xxx/xxx.sh

Perfact!
當然inotifywait和inotifywatch還有很多參數(shù)可以設(shè)置酪穿,功能也很強大晴裹,這里我只用了冰山一角就完成了我的任務(wù)涧团。很好泌绣,很強大!赞别!
置于inotify-tools的資料仿滔,可以自己找“男人”問問!

image.png

#man inotifywait

這個是最權(quán)威的資料崎页,前提是你喜歡english,當然現(xiàn)在網(wǎng)絡(luò)上也有成堆的中文解釋和說明可以閱讀蜈膨,就看個人習慣吧翁巍!
最后,慶祝下我這篇簡書處女作的誕生T詈杈曲!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末担扑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胚宦,更是在濱河造成了極大的恐慌间唉,老刑警劉巖利术,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件被冒,死亡現(xiàn)場離奇詭異轮蜕,居然都是意外死亡,警方通過查閱死者的電腦和手機率触,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門葱蝗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來两曼,“玉大人,你說我怎么就攤上這事偿枕〗タ洌” “怎么了寸莫?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵膘茎,是天一觀的道長披坏。 經(jīng)常有香客問我,道長伞梯,這世上最難降的妖魔是什么谜诫? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任攻旦,我火速辦了婚禮,結(jié)果婚禮上牢屋,老公的妹妹穿的比我還像新娘。我一直安慰自己锋谐,他們只是感情好截酷,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布多搀。 她就那樣靜靜地躺著歧蕉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪康铭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天赌髓,我揣著相機與錄音从藤,去河邊找鬼。 笑死锁蠕,一個胖子當著我的面吹牛夷野,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荣倾,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼悯搔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了舌仍?” 一聲冷哼從身側(cè)響起妒貌,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤灌曙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蚣驼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡靡馁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年衩椒,在試婚紗的時候發(fā)現(xiàn)自己被綠了软棺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片最冰。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡篇裁,死狀恐怖颠焦,靈堂內(nèi)的尸體忽然破棺而出分冈,到底是詐尸還是另有隱情集乔,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布丈攒,位于F島的核電站际插,受9級特大地震影響辛辨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜幽七,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一绩蜻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸佳鳖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽土涝。三九已至,卻和暖如春弹渔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工莺匠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卫袒,地道東北人逮矛。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓赡译,卻偏偏與公主長得像品腹,于是被迫代替她去往敵國和親蔑穴。 傳聞我的和親對象是個殘疾皇子衷旅,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容