inotifyイベントが複数回起動する理由
この質問は、私がStackoverflowで提起した別の質問から生じます。私が使用していウォッチャーを -同じ問題がに適用されますIncron -離れて変わり、静かにリスのためのDropboxにそれらの変更をフォルダとその子フォルダを監視すること。 write_closeイベントを監視します-- IN_CLOSE_WRITE目的のため。もともと私はmodifyイベント、すなわちIN_MODIFYを見ていました。これは機能しましたが、大きなファイルを書き込むと、複数回起動することがわかりました。それは公平に聞こえたのでIN_CLOSE_WRITE、特定のファイルについては一度しか発生しないと仮定するのが合理的だと感じたため、切り替えました。 ただし、そうではありません。Nanoで作成された非常に小さなテキストファイル(1文字のみ)でも、イベントは2回発生します。せいぜいこれは、同じファイルがDropboxで2回同期されると、不必要なトラフィックになる可能性があります。私の場合、最初のイベントで同期を実行してからサーバー側のファイルを削除するため、災害につながります。結果-2番目のイベントでは、Dropbox側のファイルは0バイトのファイルになります。 私は今のところ、他の作業を行う前に同期スクリプトを10秒間スリープさせ、Dropboxの同期を試みる前に問題のファイルがまだ存在することを確認することで対処しています。これが機能するのは、2回目の反復でファイルが見つからず、スクリプトが終了するだけだからです。 これはせいぜいハックに聞こえます。恐らく悪いハックではないかもしれませんが、私は理解したいと思います-なぜIN_CLOSE_WRITEイベントが複数回発生するのですか? いくつかの追加情報 ウォッチャーのインスタンスが複数実行されていないことを確認してください。 からの出力 ps ax|grep watcher.py 23880 ? Sl 0:01 python /usr/local/bin/watcher.py restart 24977 pts/0 S+ 0:00 grep --color=auto watcher.py ファイルシステムはext4です。Incronでまったく同じ問題が発生したことに言及する必要があります。経由で実行されるバッチスクリプトからWatcherデーモンを起動します/etc/rc2.d。Incron OTHは、デフォルトのapt-get install incronインストールを介して、私が何もしなくても起動します。 私のwatcher.iniファイルの本質を以下に示します。 [DEFAULT] logfile=/var/log/watcher.log pidfile=/var/run/watcher.pid [job1] watch=/path/to/watch events=write_close excluded= recursive=true autoadd=true command=/home/datastore.php $filename datastore.php面倒なDropboxアップロード+ソース削除コードなしでスクリプトが2回起動されることを確認するために、スクリプトを必要最低限のものに減らしました。 #! /usr/bin/php <?php file_put_contents('/tmp/watcher',$argv[1],FILE_APPEND); ?> …