Java 7 の new.xml を使用して、ルート フォルダーとそのサブフォルダーを監視する小さな Java アプリケーション/サービスがありますjava.nio.file.WatchService
。新しいイベント (新しいファイル、変更、削除など) が発生すると、サーバー A からサーバー B (またはその逆) にファイルをコピーするために rsync 実行を開始します。このコマンドは --delete オプションを使用して、A から削除されたファイルが B からも削除されるようにします。ただし、この機能を使用するには、有効にする必要があります-r
(再帰サブディレクトリ)。通常、これは大したことではありませんが、ルート フォルダーには 5 GB のデータ (19000 ファイル、1500 フォルダー) があります。Rsync は優れた機能を備えていますが、それでも実行に数分かかります。
私が抱えている問題は、ファイルが両方のサーバーでほぼ同時に変更された場合、サーバー A で作成された新しいファイルが B-> A の同期プロセスによって削除される可能性があることです--delete
。宛先にはソースよりも多くのファイルがあります。
私はすでに Java アプリケーションですべてのディレクトリを再帰的に監視しているので-r
、rsync で (再帰的に) 使用する必要はありません。私の最初の考えは、rsync で再帰の深さを制限することでしたが、それは rsync の機能ではないと思います。使用も検討し--exclude
ましたが、パターンがどのように見えるかわかりません。誰にもアイデアはありますか?
参考までに、生成された rsync コマンドのサンプルを次に示します。
rsync -r --no-group --no-owner --no-perms --update --checksum --verbose --progress --stats --delete --ignore-errors "/media/server1files/" "/server2::server2"