~/A
2つのフォルダと~/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つの質問があります。答える方が簡単なので、まず第二のものを見てみましょう。
ただし、この時点で、私は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
。