inotify-tools rsync unison を利用してディレクトリを同期する

inotify-tools rsync unison を利用してディレクトリを同期する

2019-11-033 min read

目次

  1. 概要
  2. 環境バージョン情報等
  3. inotifywait--rsync-で同期する
  4. inotifywait--unison-で同期する
  5. 参考

概要

inotify-tools + rsync or inotify-tools + unison でディレクトリ間をリアルタイムで同期する方法の紹介です。

開発環境へのアップロードなどの場面で役立つでしょう。

環境・バージョン情報等

CentOS6上で検証しています。

inotify-tools

https://github.com/rvoicilas/inotify-tools

バージョン情報

  • CentOS6
  • inotify-tools (inotifywait, inotifywatch) 3.14
  • Rsync 3.0.6
  • unison 2.40.63

インストール

inotify-tools

# 必要なモジュール類のインストール
$ yum -y install wget gcc gcc-c++ make
# inotify-toolsのインストール
$ cd /tmp
$ wget http://download-ib01.fedoraproject.org/pub/epel/6/x86_64/Packages/i/inotify-tools-3.14-2.el6.x86_64.rpm
$ yum -y localinstall inotify-tools-3.14-2.el6.x86_64.rpm
https://centos.pkgs.org/6/epel-x86_64/inotify-tools-3.14-2.el6.x86_64.rpm.html

rsync

$ yum -y install rsync

unison

$ cd /tmp
$ wget http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el6/en/x86_64/rpmforge/RPMS/unison-2.40.63-1.el6.rf.x86_64.rpm
$ yum -y localinstall unison-2.40.63-1.el6.rf.x86_64.rpm
https://centos.pkgs.org/6/repoforge-x86_64/unison-2.40.63-1.el6.rf.x86_64.rpm.html

inotifywait + rsync で同期する

ここで 作業ディレクトリ src1/ と src2/ を同期する方法を考えます。

fswatch + rsync を利用する方法は 例えばsrc1/ ディレクトリでファイルに変更があった場合 src2/ に同期するというものです。

$ inotifywait -m /path/to/src1 | xargs -I{} rsync -r /path/to/src1/ /path/to/src2/

inotifywait の -e オプションで監視するイベントの種類を絞る事ができます。また複数の操作を行うのであれば、whileで回した方が良いと思います。

#!/bin/bash

SRC_PATH=/path/to/src1/
DST_PATH=/path/to/src2/

while inotifywait -e CREATE -e MODIFY -e DELETE $SRC_PATH; do
    rsync -r $SRC_PATH $DST_PATH
    chown www-data:www-data -R $DST_PATH
    chmod 755 -R $DST_PATH
done

次は双方間のディレクトリ同期についてです。\n双方間の同期の実現は、rsyncよりunisonの方が向いています。

inotifywait + unison で同期する

次に fswatch + unison を利用して src1/ と src2/ の双方向で同期する方法を紹介します。

unisonの設定

unisonを容易に利用するために設定ファイルを記述します。

~/.unison/sync.prf

# タイムスタンプをコピーする
times = true

# 新しいファイルを優先
prefer = newer

# 同期する対象のルートパスの定義
root=/path/to/src1/
root=/path/to/src2/

# 同期するパスの定義
path=./

同期コマンド

$ inotifywait -m /path/to/src1 /path/to/src2 | xargs -I{} unison -batch sync

参考

https://codeday.me/jp/qa/20190816/1457317.html

[https://qiita.com/stc1988/items/464410382f8425681c20

Tags
javascript(110)
node.js(54)
linux(54)
amazon%20aws(47)
typescript(45)
%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0(36)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86(30)
html5(29)
php(24)
centos(24)
python(22)
%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0(21)
mac(21)
mysql(20)
canvas(19)
opencv(17)
%E9%9B%91%E8%AB%87(16)
docker(16)
wordpress(15)
atcoder(14)
apache(12)
%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92(12)
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9(12)
amazon%20s3(12)
red%20hat(12)
prisma(12)
ubuntu(11)
github(10)
git(10)
vue.js(10)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86100%E6%9C%AC%E3%83%8E%E3%83%83%E3%82%AF(10)
mariadb(10)
react(9)
aws%20cdk(9)
css3(8)
%E5%8F%AF%E8%A6%96%E5%8C%96(8)
%E5%B0%8F%E3%83%8D%E3%82%BF(8)
nestjs(8)
amazon%20lightsail(7)
next.js(7)
%E3%83%96%E3%83%AD%E3%82%B0(6)
cms(6)
oracle(6)
perl(6)
gitlab(6)
iam(5)
amazon%20ec2(5)
%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93(5)
aws%20amplify(5)
curl(4)
Author
githubzennqiita
ただの備忘録です。

※外部送信に関する公表事項