Linux 系統(tǒng)中使用 inotifywait 監(jiān)控文件變化
有時候我們常需要當(dāng)文件變化的時候便觸發(fā)某些腳本操作,比如說有文件更新了就同步文件到遠(yuǎn)程機(jī)器。在實現(xiàn)這個操作上,主要用到兩個工具,一個是rsync,一個是inotifywait。inotifywait的作用是監(jiān)控文件夾變化,rsync是用來同步,可同步到本機(jī)的其他目錄或者遠(yuǎn)程服務(wù)器上。
我們先看下二者的安裝方式。
安裝rsync
wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.1.tar.gz
tar zxvf rsync-3.1.1.tar.gz
./configure –prefix=/usr/local/rsync-3.1.1
make
make install
安裝inotifywait
wget http://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
創(chuàng)建并運行腳本
新建腳本inotifywait.sh 并輸入以下內(nèi)容:
#!/bin/bash
export CNROMS_SRC=/home/ftpuser/gri/ # 同步的路徑,請根據(jù)實際情況修改
inotifywait --exclude '\.(part|swp)' -r -mq -e modify,move_self,create,delete,move,close_write $CNROMS_SRC |
while read event;
do
rsync -vazu --progress --password-file=/etc/rsyncd_rsync.secret /home/ftpuser/gri/sla rsync@10.208.1.1::gri ##這里執(zhí)行同步的命令,可以改為其他的命令
done
然后,執(zhí)行下面命令,會在后臺執(zhí)行監(jiān)控。
nohup sh inotifywait.sh > /dev/null 2>&1
接下來我們重點看下inotify的使用。
inotify 是一個 Linux 內(nèi)核提供的 API,它可以監(jiān)視文件系統(tǒng)事件,比如文件或目錄的創(chuàng)建、刪除、修改等。
inotify-tools 是一套用戶空間的工具,包括 inotifywait 和 inotifywatch,用于使用 inotify API。
這些工具可以對文件系統(tǒng)事件進(jìn)行監(jiān)控,并生成相應(yīng)的警告或日志。
inotifywait是一個非常實用的命令,它屬于inotify-tools包,可以用來監(jiān)控Linux文件系統(tǒng)事件。
下面是一些inotifywait應(yīng)用的例子:
監(jiān)控目錄或文件的創(chuàng)建、刪除、移動等操作:
inotifywait -m -r -e create,delete,move /path/to/directory
這個命令將監(jiān)視/path/to/directory目錄中所有文件和目錄的創(chuàng)建、刪除和移動操作。當(dāng)有文件或目錄被創(chuàng)建、刪除或移動時,這個命令將顯示相應(yīng)的信息。
監(jiān)控文件的修改操作:
inotifywait -m -r -e modify /path/to/file
這個命令將監(jiān)視/path/to/file文件的修改操作。當(dāng)有文件被修改時,這個命令將顯示相應(yīng)的信息。
監(jiān)控目錄或文件的屬性變化:
inotifywait -m -r -e attrib /path/to/directory
這個命令將監(jiān)視/path/to/directory目錄中所有文件和目錄的屬性變化。當(dāng)有文件或目錄的屬性發(fā)生變化時,這個命令將顯示相應(yīng)的信息。
監(jiān)控多個目錄或文件的事件:
inotifywait -m -r -e create,delete,move /path/to/directory1 /path/to/directory2 /path/to/file1 /path/to/file2
這個命令將監(jiān)視多個目錄和文件的創(chuàng)建、刪除和移動操作。當(dāng)有目錄或文件發(fā)生相應(yīng)的事件時,這個命令將顯示相應(yīng)的信息。
監(jiān)控事件并執(zhí)行命令:
inotifywait -m -r -e create,delete,move /path/to/directory -- /path/to/command
上面的命令將監(jiān)視/path/to/directory目錄中所有文件和目錄的創(chuàng)建、刪除和移動操作,并在事件發(fā)生時執(zhí)行指定的命令??梢詫⒚钐鎿Q為你想要執(zhí)行的任何命令。這些例子只是inotifywait的一些基本用法,大家可以根據(jù)自己的需求進(jìn)一步擴(kuò)展和定制。