lsyncd - 同期方法ですが、フォルダ全体に適用されます。

lsyncd - 同期方法ですが、フォルダ全体に適用されます。

~/A2つのフォルダと~/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。私が知る限り、デフォルトのタイムアウトがありますが、追加でlsyncd1000(デフォルト)が変更されることを発見した場合源泉ツリー(通過)、その後(タイムアウトに関係なく)、すべてのツリーを一度に同期するためにinotify実行されます。rsyncもちろん、これはrsyncすべての変更後に実行するよりもはるかに優れています。

それでは最後の質問(「どうすればいいですか?」)に戻って、全然できない、またはいくつかのプログラミングが必要です。それぞれの場合、デーモンを実行してファイルシステムの変更を監視する必要があります。ターゲットその後、自分で実行してrsync同期します。源泉到着ターゲット、またはそのような変更が発生したときに他のデーモンに通知します。源泉順次実行しますrsync

しかし、それはもはや不要になりますlsyncd。なぜなら、この知識を使うと、おそらく独自の双方向同期システムを構築できるからです。

それでは、最初の質問に答えてみましょう。

私の設定ファイルに基づいて〜/ Bからファイルを削除すると、〜/ Aから削除されないことが予想され、同じです!

あなたの設定を考えると、ここで何が間違っているのかすぐにはわかりません。このようなことが実際に起こってはいけません。しかし、さらなる分析のための提案があります。

起動時にlsyncdパラメータを追加します-log Exec。これにより、コマンドラインに次のように表示されます。

lsyncd -log Exec -nodaemon ~/.config/lsyncd/lsyncd.conf

これにより、プロセスによって生成されたすべてのコマンドラインが記録されますlsyncd(あなたの端末に)。私はこれらのコマンドラインを公開するとき(好ましくは元の質問へのアップデートで)問題を識別できると確信しています。rsyncコマンドライン引数を含む実行方法を表示する必要があります。私が分析するのに役立つかもしれませんが、正直なところ、まだ深さはありませんrsync

関連情報