ディレクトリ監視といくつかのポストタスクの実行に関して、Inotifydはinotifywaitとどう違うのですか?

ディレクトリ監視といくつかのポストタスクの実行に関して、Inotifydはinotifywaitとどう違うのですか?

ディレクトリを監視し、発生したイベントに基づいていくつかのポストアクションを実行する必要があります。おなじみですが、inotifywaitアルパインベースのドッカーを使ってみると他の方法がないかと思います。

それから私は見つけました。Inotifyd文書によると、「inotify(inotify-tools)を中心に設計されたいくつかのツールがありますが、Alpineにはファイルシステムイベントに対してコマンドを実行するためのinotifyd(busyboxの一部)という組み込みツールがあります」

しかし、問題は、a)アルパイン文書の設定によると、inotifydb)inotifywait inotifydに関する記事があまり見つからないことです。だから広く使われていないと思います。

それでは、Inotifydの経験を持つ人はこれを説明できますか?

ベストアンサー1

また、文書への回答がうまくいかないことも知っています。特に高い評価を受けるマスクの場合。

これは役に立つかもしれません:

セッション中に通知を受け取った例

localhost:~$ cat >handler.sh    
#! /bin/sh  
#1 is event, 2 is file or dir,   
#3 is file only if 2 is dir.   
echo $1 $2 $3  

localhost:~$ inotifyd handler.sh 
test:we &  
[2] 5375  

localhost:~$ touch test  
e       test

localhost:~$ echo "hello" > test  
w       test  

顔の覆いはオプションです。何も指定しないと、すべてのイベントが監視されます。複数のイベントを指定し、必要に応じて複数のイベントがソートされます。。上記の例は、これが可能であることを示しています。

inotifywaitとの主な違いは、inotifydハンドラを式として指定できないことです。常にPROGのような別々のファイルです。対照的に、inotifywaitの場合、ハンドラPROGは指定されません。代わりに、inotifywait呼び出しの出力はハンドラEXPRESSIONにパイプまたはリダイレクトされ、次の例のように必要に応じてハンドラPROGを呼び出すことができます。

inotifywaitはい(セッションなし。自分で試してください)

#pipe inotifywait output  
#(most straight forward)  
#use EXPRESSION    
inotifywait -e modify,attrib -m 
test | while read -r event ; do 
echo $event  ; done &  

#redirect inotifywait output with  
#process substitution.  
#use EXPRESSION  
while IFS= read -r event ; do echo 
$event ; done < <(inotifywait -e 
modify,attrib -m setup) &  

#using a PROG
inotifywait -e modify,attrib -m 
test | while read -r event ; do 
handler.sh ; done &

また、inotifywait を使用すると、単一の呼び出しを許可して、ターゲットを継続的に監視するかどうかを指定できます。

#notice no -m option
inotifywait -e attrib 
crashflagfile | while read -r 
event do ; restart.sh ; done &

効率については、-e 修正、attrib の簡単な引数処理を検討してください。
エラーがより早く発生するだけでなく、短いシンボルはイベントマスク引数全体で文字ごとの解析によって利点を得ることができます。これにより、イベントマスクの解析が速くなり、時計の起動パフォーマンスが向上します。

監視の追加や予約にも違いがあります。 Inotifydはinotifyを実行して監視を追加し、イベントをポーリングし、execまたはexecv呼び出しを使用してハンドラを呼び出します。一方、onotifywaitはinotifyを実行し、ウォッチを追加し、イベントをポーリングしてからイベントデータを出力(書き込み)して、シェルがイベントデータを式に「パイプ」できるようにします。したがって、これはexec呼び出しとシェル式の作成です。ゲームは非常に近かった。 inotifydはバイナリ実行可能ファイルをハンドラとして使用できますが、シェル式は独自のハンドラを持つことができます。そこには古い議論があります。

したがって、全体的に、inotifywaitはいくつかの柔軟性を追加し、watchset呼び出しにはハンドラが含まれているため、追加のハンドラファイルは必要ありません。一部の人はこれが好きですが、他の人はきちんとした分離とinotifyd実行可能ファイルの選択のより直接的な使用を好むかもしれません。
一見すると、実行時のパフォーマンスは同じに見えますが、inotifywaitのslartup時間は遅くなります(ただし、イベントに単一文字を使用するようにinotifywaitのソースコードを変更すると、この問題を解決できます)。 inotifyライブラリを直接使用する必要がない場合は、どちらも良い選択です。

ファイルを楽しく監視しよう!

おすすめ記事