2 つのフォルダー~/A
とがあります~/B
。いくつかのコンテンツがあります。
lsyncd
設定ファイルを作成します~/.config/lsyncd/lsyncd.conf
:
# NOTE: Use only absolute path names
# NOTE: check "man rsync" for parameters inside "rsync{}".
# Global settings
settings {
logfile = "/home/ziga/.config/lsyncd/lsyncd.log",
statusFile = "/home/ziga/.config/lsyncd/lsyncd-status.log",
statusInterval = 5
}
# Synchronisation A ⟶ B
sync {
default.rsync,
source = "/home/ziga/A",
target = "/home/ziga/B",
delete = true,
rsync = {
binary = "/usr/bin/rsync",
executability = true,
existing = false,
}
}
そして私はlsyncd
こう始めます:
lsyncd -nodaemon ~/.config/lsyncd/lsyncd.conf
注記:パラメーターは
-nodemon
、上記のコマンドを実行するターミナルで詳細情報を提供するためだけに存在します。
コマンドが実行されるとすぐに同期が行われ、フォルダーの内容が~/A
フォルダーに転送されます~/B
。これで問題ありません。
私の設定ファイルによれば、 内のファイルを削除しても~/B
、 からは削除されないはず~/A
ですが、実際にその通りになりました。これは望ましい動作です。フォルダー 内のコンテンツが誤って削除されるのを防ぎたいのです~/A
。
しかし、この時点で、フォルダーに削除したばかりのファイルがないことがlsyncd
検出され、起動時にすぐに実行されるように、不足しているファイルをからにコピーしてフォルダーを再度同期することも期待しています。~/B
~/A
~/B
しかし、これは起こりません。
これはどうすればできるのでしょうか?
答え1
実際には、別々に扱うべき質問が 2 つあります。まずは 2 番目の質問を見てみましょう。答えるのが簡単だからです。
しかし、この時点で、lsyncd はフォルダー ~/B に削除したばかりのファイルがないことを検出し、起動時にすぐに実行されるように、不足しているファイルを ~/A から ~/B にコピーしてフォルダーを再度同期することを期待します。
あなたの設定では、ファイルが削除されたときに即座に反応することは期待できません。目標.変化を監視するためにlsyncd
使用しますinotify
ソースファイルツリー。実際には、起動時に行われる最初の同期の後、目標代わりに、時々(下記参照)rsync
、ソース木に目標。
理論的には、lsyncd
ターゲットを監視することinotify
もできるターゲットがローカルである限りしかし、通常はそうではありません。ターゲットがリモートホスト上にあると仮定しましょう(あなたの例とは対照的に)。その場合lsyncd
、リモートターゲット削除されていますか?
しかし、これは問題ではありません。次回にlsyncd
新しい同期を開始すると( を実行してrsync
)、ファイルは再び作成されます。つまり、すぐにターゲット上でファイルが削除された場合、そのファイルは次回のrsync
実行時に再度コピーされます。次回のrsync
実行は、ターゲット上で一定回数の変更があった後に行われます。ソースツリー(下記参照)または起動時に実行されます。
lsyncd
同期の実行頻度は で設定できますrsync
。私が理解している限りでは、デフォルトのタイムアウトがありますが、さらに、lsyncd
1000(デフォルト値)の変化を通知すると、ソースツリー ( 経由inotify
) で同期を実行すると、(タイムアウトに関係なく)rsync
すべてが一度に同期されます。もちろん、これはrsync
変更ごとに実行するよりもはるかに優れています。
さて、最後の質問(「どうすればこれができるのか」)に移りますが、それは全くできない、またはプログラミングが必要です。いずれの場合も、ファイルシステムの変更を監視するデーモンを実行する必要があります。目標そして、独自に実行してrsync
、ソースに目標、またはそのような変更があった場合に別のデーモンに通知するソースが実行されますrsync
。
lsyncd
しかし、その知識があれば、おそらく独自の双方向同期システムを構築できるため、それ以上は必要ありません。
さて、最初の問題に移りましょう:
私の設定ファイルによれば、~/B のファイルを削除しても、~/A からは削除されないはずですが、実際にその通りになりました。
ここで何が問題なのかすぐにはわかりません。設定上、これは実際には発生しないはずです。ただし、さらなる分析に関して提案があります。
を起動するときにlsyncd
、パラメータ を追加します-log Exec
。コマンド ラインは次のようになります。
lsyncd -log Exec -nodaemon ~/.config/lsyncd/lsyncd.conf
これにより、生成されたすべてのプロセスのコマンド ラインがログに記録されますlsyncd
(この場合は、ターミナルに)。これらのコマンド ラインを投稿していただければ (できれば、元の質問の更新として)、問題を特定できると確信しています。rsync
コマンド ライン パラメータを含め、実行方法が示されているはずです。分析のお手伝いはできるかもしれませんが、正直に言うと、私は にそれほど詳しくありませんrsync
。