inotify-toolsの構成と応用実践(修正)


inotifyは使いやすいトリガソフトウェアで、フォルダの変更を監視し、処理することができます.公式サイトhttps://github.com/rvoicilas/inotify-tools/wiki/ 
次に、/aaa/test.txtファイル変更ソフトウェアを変更している人がいるとすぐに情報が出力されるように、/aaaというファイル(サブディレクトリを含む)を監視したり、いくつかのインスタンスをインストールして適用したりしてみましょう.
ダウンロード:inotify-tools-3.14.tar.gz#tar.zxvf inotify-tools-3.14.tar.gz#./configure --prefix=/usr #make #su -c 'make install' “/usr/local/bin/inotifywait: error while loading shared libraries: libinotifytools.so.0” : ln -sv /usr/local/lib/libinotify* /usr/lib/
ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0
cp /usr/lib/libinotifytools.so.0 /usr/local/lib/

組み立てて、実行してみます[root@mysql1 test#/usr/bin/inotifywait -rme modify,delete,create,attrib /aaaは次に/aaaの下にファイルを新規作成または変更して結果を表示する.  Beware:since-r was given,this may take a while!Watches estaablishhed./aaa/CREATE.test.swp/aaa/CREATE.test.test.swpx/aaa/DELETE.test.swpx/aaaaa/DELETE.test.swp/aaaaa/DELETE.test.swp/aaaaa/CREATE.test.test.swp/aaaaaaa/MODIFY.test.swp/aaaaa/MODIFY.test.swp/aaaaa/MODIFY.test.swp/aaaaaaa/CREATE test/aaaaaaa/aaaaaaaa/MODIFY test/aaa/MODIFY.test.swp/aaa/DELETE.test.swp modify,delete,create,attrib分変更、削除、新規作成ではありません.後に--exculde=PATTERNパラメータを追加すると、サブフォルダを無視できます.
inotifyが監視できるファイルシステムイベントには、IN_ACCESS、すなわち、ファイルがIN_MODIFYにアクセスされ、ファイルがwrite IN_ATTRIBされ、ファイル属性が変更され、chmod、chown、touchなどのIN_CLOSE_WRITE、書き込み可能ファイルがclose IN_CLOSE_NOWRITE、書き込み不可ファイルがclose IN_OPEN、ファイルがopen IN_MOVED_FROM、ファイルが移動され、mv IN_MOVED_TOなどのファイルが移動されるしたがって、mv、cp IN_CREATEのように、新しいファイルIN_DELETEが作成され、rm IN_DELETE_SELFのようなファイルが削除され、自己削除される.すなわち、実行可能ファイルが実行時に自己IN_MOVE_SELFを削除し、自己移動する.すなわち、実行可能ファイルが実行時に自己IN_UNMOUNTを移動し、ホストファイルシステムがumount IN_CLOSEによってファイルが閉じられる.(IN_CLOSE_WRITE|IN_CLOSE_NOWRITE)IN_MOVE、ファイルが移動され、(IN_MOVED_FROM|IN_MOVED_TO)注:上記のファイルにもディレクトリが含まれています.
トリガ処理
公式にはinotifyを利用してRSYNC同期をトリガした例がある.
#!/bin/sh # get the current path CURPATH=`pwd` inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f'\-e close_write/tmp/test | while read date time dir file; do        FILECHANGE=${dir}${file}        # convert absolute path to relative        FILECHANGEREL=`echo "$FILECHANGE"| sed 's_'$CURPATH'/__'`        rsync --progress --relative -vrae 'ssh -p 22'  $FILECHANGEREL [email protected]:/backup/root/dir &&\       echo "At ${time} on ${date}, file $FILECHANGE was backed up via rsync"done  
例2:#!/bin/sh EVENT=$(inotifywait--format'%e'~/file 1)[$?!=0]&&exit["$EVENT"="MODIFY"&&echo'file modified!'["$EVENT"="DELETE_SELF"&&echo'file deleted!'#etc... 
簡単なSHELLトリガ:vim test.sh#!/bin/bash/usr/local/inotify/bin/inotifywait-rme create/aaa       --モニタ/aaaフォルダ新規ファイル|while read file do        a=${dir}${file}          ---出力情報        a=`echo "$a"|awk '{print $1$3}'`  ---awkでフルパスを切り取る        echo $a         echo${file}done do-doneの間にRSYNCなどのコードを書きます...
 
ネット上のrsyncトリガ同期例
#!/bin/sh src=/data/www/wwwroot/des=/data/www/wwwroot ip=192.168.1.101
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format  '%T %w%f'\-e modify,delete,create,attrib\${src}\| while read  file         do                 rsync -avz --delete --progress ${src} root@${ip}:${des} &&                 #echo "${src} was rsynced"                #echo "-----------------------------------------------------"        done