質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.83%

lsyncd + rsyncdのリアルタイム片方向同期を行いたいが、lsyncによりファイルのdeleteが行われない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 859

sujico.net

score 439

困っていること

lsyncdとrsyncdにより、親サーバのあるディレクトリの内容を子サーバのあるディレクトリに同期する形でコピーしたいと考えています。
コピーしたい内容は以下です。

  • ディレクトリ、ファイルの作成、更新、削除
  • ディレクトリ、ファイルの権限
  • ディレクトリ、ファイルのタイムスタンプ

しかし、この内削除のみうまくいきません。
やりたいことは、「同期先で作成されたファイル」が「同期元に無い」場合「同期先でファイルを削除」するということです。

調べてみたところ、lsyncdで同期元に無いファイルをrsyncdで削除するには、lsyncdの設定ファイルでdeleteをtrueにする必要があるようですが、
ドキュメントによるとdelete=trueはデフォルト設定になっているようです。

rsyncで--deleteオプションをつけて実施すれば問題なく差分削除されますし、
lsyncに関してもsystemctl restart lsyncd.service などとサービスの再起動を行えばそのタイミングで差分削除が行われます。

この差分削除に関して動作させたいのですが、何か特別な条件などが必要でしょうか。

動作環境

バージョンなど

OS …… AmazonLinux2 (Amazon EC2で動作 / 2つのOSでそれぞれ検証済)
rsync …… 3.1.2 (親子同じ)
lsync …… 2.2.2 (親子同じ)

設定

/etc/lsyncd.conf (親サーバ)

settings {
    logfile        = "/var/log/lsyncd.log",
    pidfile        = "/var/run/lsyncd.pid",
    statusFile     = "/var/log/lsyncd-status.log",
    statusInterval = 1,
    nodaemon       = false,
}

sync {
    default.rsync,
    source = "/tmp/rsynctest/test1/",
    target = "xxx.xxx.xxx.xxx::module1",
    delay = 0,
    rsync = {
        owner = true,
        group = true,
        perms = true,
        hard_links = true,
        archive = true,
        inplace = true
    }
}


 
/etc/rsyncd.conf (親サーバ)

uid           = root
gid           = root
log file      = /var/log/rsyncd.log
pid file      = /var/run/rsyncd.pid
hosts allow   = xxx.xxx.xxx.xxx/32
hosts deny    = *
read only     = true
exclude       = *
include       = *
dont compress = *.gz *.tgz *.zip *.pdf *.sit *.sitx *.lzh *.bz2 *.jpg *.gif *.png

#------------------
# MODULE PARAMETERS
#------------------
[module1]
    comment = rsync test dir1
    path    = /tmp/rsynctest/test1/

ここまで調査した中であやしいこと

https://qiita.com/msssgur/items/4e2b199796654e0af791
上記にて、

リモートで修正されたものはローカルと同期されないので、変更は必ずローカルで行うこと。

とあるため、実はそもそもリモートで作成したファイルはlsyncで削除できないのではと考えています。

ただ、lsyncdを再起動したときとrsyncでならば「同期」することが出来るため、これが正しい動作なのかどうかがわからなくなっています。

参考サイト

  • https://www.atmarkit.co.jp/ait/articles/1702/02/news031.html
  • https://axkibe.github.io/lsyncd/manual/config/layer4/
  • http://www.1x1.jp/blog/2008/04/rsync_delete_asterisk.html
  • https://www.very-cute.net/wp/79/
  • http://www.maruko2.com/mw/rsync_%E3%81%A7%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AE%E5%90%8C%E6%9C%9F%EF%BC%88%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%EF%BC%89
  • https://101010.fun/posts/mac-shell-rsync.html
  • https://techblog.kyamanak.com/entry/2017/09/19/180516
  • https://qiita.com/mitzi2funk/items/9308db56829d7b4cb90d
  • https://hacknote.jp/archives/31531/
  • https://qiita.com/daikiichikawa/items/f04e6bd6e4d615dfcd4b
  • https://codeday.me/jp/qa/20181206/41512.html
  • https://qiita.com/ritsuka/items/67f3d86ac245a5acd269
  • https://changineer.info/server/centos_basic/lsyncd_rsynd.html
  • https://q.hatena.ne.jp/1403497791
  • https://teratail.com/questions/157554
  • https://www.greptips.com/posts/9/
  • https://qiita.com/Yuki_BB3/items/31629ca7f40703c139be
  • https://www.powercms.jp/blog/2017/10/lsyncd.html
  • https://norm-nois.com/blog/archives/4784
  • https://qiita.com/msssgur/items/4e2b199796654e0af791
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

やりたいことは、「同期先で作成されたファイル」が「同期元に無い」場合「同期先でファイルを削除」するということです。

これは、同期先でファイルを作成しただけですか?

lsyncdはinotify APIを使用して同期元で指定したディレクトリ内の変更を監視する仕組みです。

lsyncdでrsyncが実行されるトリガーは以下のふたつです。
・lsyncd起動時
・同期元で指定したディレクトリ内で何らかの変更が発生した場合

同期先でファイルを作成したのち、同期元で何かのファイルを変更してみてください。 同期先で作成したファイルが削除されるはずです。
これ間違いだったようです。
CMSからのHTML出力をWEBサーバーに同期していたのですが、CMSが出力する際に一旦丸ごと削除して出力しなおしていたため一見このような動作に見えていただけだったようです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/24 13:56

    勉強になりました、ご回答頂きありがとうございました!
    ベストアンサーとさせて頂きます。

    キャンセル

  • 2019/10/24 13:58

    お役に立てませんでした。
    リアルタイムでなくていいなら、別途cronなどで定期的にrsyncで同期しちゃうとか・・・

    キャンセル

  • 2019/10/24 15:07

    とんでもございません。
    そうですね、同期先サーバにはユーザが書き込み出来ないようにした上で、lsyncを活用するかrsyncを直で実行する運用にするか、考えてみたいと思います!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る