nDiki

2009年2月13日 (金)

ファイルを変更すると自動的に rsync してくれる lsyncd

ファイルを変更すると「何もしなくても」自動的に同期してくれる Dropbox が非常に便利で昨年9月以来ずっと使っている。 「何もしなくても」同期してくれるというのが気にいったので、Linux 上でもいいソフトウェアがないか探してみた。 で見つけたのが lsyncd (というか1年以上前に1度チェックした形跡があるが記憶にない)。

inotify でファイルの変更を検出して自動的に rsync を実行してくれるというもの。 裏で rsync を呼び出すので同期先は rsync できる場所ならローカルでもリモートでも OK。

例えば lsyncd /tmp/a/ /tmp/b/ とすると、/tmp/a/ でファイルの作成・変更・削除を行うと /tmp/b/ にもすぐ反映される。 これはいい。 一般ユーザでも実行可能。

Dropbox から USB メモリに常に同期しておくのとかに使えそうだな。

なおデフォルトでは

 -lt%r --delete {--exclude-from [FILE]} [SOURCE] [DIRECTORY]

というオプションで rsync が呼び出される (%r は lsyncd 起動時には r、それ以外は d になる)。 ここで --delete が指定されているので注意。 lsyncd.conf.xml ファイルを作成して --conf オプションでそのファイルを指定すれば、rsync の引数を変更できる。 rsync の --delete オプションを外し、また -a オプション相当を指定するならば以下のような設定ファイルを作ればよい。

 <lsyncd version="1">
   <settings>
     <callopts>
       <option text="-%rlptgoD"/>
       <exclude-file/>
       <source/>
       <destination/>
     </callopts>
   </settings>
 </lsyncd>

ただしソース側で chmod をしてもイベントを拾わないので、すぐには rsync が実行されず権限が同期先に反映されないことを理解しておく必要がある。 lsyncd ではディレクトリ単位で rsync を実行するので、同じディレクトリでファイルの変更等がおきることで副次的にそのディレクトリの他のファイルの権限変更が同期されることになる (rsync で -p オプションを指定している場合)。

Debian GNU/Linux sid では Debian パッケージになっていないようで、今回はソースからインストールした。

 tar zxvf lsyncd-1.26.tar.gz
 cd lsyncd-1.26
 dh_make --createorig
 fakeroot dpkg-buildpackage
 sudo dpkg --install ../lsyncd_1.26-1_i386.deb
スポンサード リンク
[ 2月13日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

follow us in feedly

月別インデックス
Process Time: 0.204603s / load averages: 0.97, 0.76, 0.59
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker