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

2019-11-03
linux%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83centosrsyncunisoninotify%20toolsinotifywait
    

目次

概要

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

    
s-yoshiki
s-yoshiki
githubtwitterqiita
Web作ってますが、インタラクティブなプログラミングも好きです。
JavaScript / Vue / node.js / PHP / AWS / OpenCV

関連記事

Ansible で Docker に LAMP環境を構築するハンズオンを作った
リポジトリ リポジトリ構成 Docker構成 Ansible role の構成 プロビジョニングの実施 ansibleでdocker上にApache MariaDB PHP…

Macでも利用できるDBクライアント MySQL PostgreSQL Oracle など
デスクトップ系ツール TablePlus DBeaver MySQL Workbench Sequel pro Webアプリケーション phpMyAdmin Adminer 参考 Macで利用できるDB (MySQL PostgreSQL Oracle…

DockerでMySQL5.1.73を利用する。docker-composeから起動
Dockerのインストールから実行まで docker-compose から起動 詳細 Docker から MySQL 5.1.73 を利用する。 Dockerのインストールから実行まで docker imageの pull。 119MB…

Proxy環境下でcurlを実行する
コマンドオプションで設定する 環境変数に設定する curlrc に記述する おまけ: curlのオプション Proxy (プロキシ) 環境下でcurl…

CentOS7 に Perl環境を構築する
環境 Perlインストール Docker上のCentOS7 に Perl および 重要なrpm類を尾インストールしPerl環境を構築する。 環境 CentOS7\n\nPerl 5.16.3 (CentOS標準) Perl…

fswatch rsync unison を使ってリアルタイムで同期する
環境・バージョン情報等 fswatch バージョン情報 インストール fswatch + rsync で同期する fswatch + unison で同期する unisonの設定 同期コマンド 参考 fswatch + rsync or fswatch…

ブラウザ上でIDE code-server を使ってみる
セットアップ Dockerから利用する バイナリから立ち上げる 参考 ブラウザ上でコードの編集や、デバッグ、コマンドを実行することができるブラウザ版IDE、code-serverを使ってみました。 セットアップ セットアップ方法はdockere…

AWS System Manager(SSM)でEC2にSSHを実行! ポート解放なし
環境 クライアント環境 macOS mojava AWS CLI Session Manager Plugin リモート環境 Ubuntu 18.04 amazon-ssm-agent クライアント環境のセットアップ macOS に Session Manager…

Ubuntu18.04にApache MariaDB PHP7.2 をセットアップ
環境情報 モジュール類の更新 Apacheのインストール PHP7.2のインストール インストール 動作確認 MariaDBのセットアップ MariaDBのインストール データベースと作業用ユーザの作成 参考 AWS の EC2 の Ubuntu18.0…

SwitchHosts hostsの設定を変更するツール
SwitchHosts インストールする homebrew scoop それ以外 設定ファイル 参考 ローカル開発環境を利用して開発している際に、ローカルのIPに対してのホスト名をhosts…

最新の投稿

GitHub Actions で Gatsby をビルドし Amazon S3 にデプロイする
GitHub Actions について あらかじめ準備しておくもの AWS IAM ユーザを環境変数にセットする workflowの記述 ビルド バッジを利用する 終わりに 参考にしたところ Gatsbyで作った静的サイトを、GitHub Actions…

cloudinaryによる画像ファイルの管理 はじめてみる
目的 cloudinary について 他のサービスとの比較 料金プラン アカウントの登録 利用してみる ダッシュボード 画像の編集 APIベースでのアクセス 感想 参考 画像の管理や配信、さらには加工といった事ができるsaas型のcloud…

JavaScriptによる2分探索(バイナリサーチ) のサンプルコード
2分探索について ソース 参考 JavaScriptで2分探索(バイナリサーチ)を実装してみました。…

Vue.jsで作成された、ちょっと面白くて役立ちそうなサービス
UIコンポーネント VueSocial CKEditor 5 Vue.Draggable Vuetable 2 vuejs-datepicker Kalendar Vue Apexcharts Vue.js Google Charts vue-cart WebIDE…

GitHubのリポジトリをGitLabに同期する GitLabのミラーリング機能
GitLabのミラーリングについて GitHubのリポジトリをGitLabに反映する その他 参考 GitLabのミラーリング機能によりGitHubなどの外部のリポジトリとのミラーリングを行うことができます。 これを使ってGitHub…

WordPressやめます Gatsbyに移行しました
これまでのWordPress運用 なぜWordPressを捨てるのか? なぜGatsbyを利用するのか? gatsbyについて WordPressから記事の救出 移行対象記事の抽出 記事の置換 Gatsbyテーマの作成 Gatsby…

WordPressのDBから記事データを抽出する
WordPressのDB関連図 公開記事一覧の取得 タグ・カテゴリの取得 サムネイルの取得 おまけ: PHPスクリプト化しました 参考にしたところ WordPressにため込んだデータMarkdown化しGatsby…

ハイフンとかマイナスとかダッシュとか

Firebase + Nuxt で認証付きページを作るときに参考にしたいところ
Webアプリケーションのセッション管理にJWT導入を検討する際の考え方 Service Worker によるセッション管理 ユーザー セッションの管理 Nuxt.jsとFirebaseでSPA×SSR×PWA×サーバーレスを実現する CookieとセッションとJWT SSR…

GolangをCGIとして実行する
環境 golang パッケージ ソースと実行 ビルドとサーバ実行 標準ライブラリのみ Golang を CGIとして実行する際のメモ 環境 golang パッケージ 以下のモジュールを利用しています。 github.com/gorilla/mux…

Tags

Dates

© 2020   404 motivation not found