リアルタイムミラーリングツール導入(lsyncd+rsyncd)



●概要

 lsyncdを使用してマシン間でリアルタイムにディレクトリのミラーリングを行うことができます。lsyncdはLinuxカーネルのinotify機能を利用して、ファイルの更新時にミラー先のrsyncサーバへrsyncを実行することにより、リアルタイムにディレクトリのミラーリングを行うことができるようになります。

 参考URL:lsyncd rsyndの設定方法

●rsyncサーバの設定(ミラー先)

 ミラー先サーバにログインします。
ミラー先ディレクトリ作成。このディレクトリにファイルがミラーリングされます
# mkdir /tmp/root
 ← ミラー先ディレクトリ所有者をnobodyに変更
# chown nobody:nobody /tmp/root
rsyncサーバ設定ファイル作成
# vi /etc/rsyncd.conf
# rsyncを動かすときのユーザ
uid = root
# syncを動かすときのグループ
gid = root
# chrootを行うかを指定
use chroot = no
# 同時接続数
max connections = 4
# ログの保存先
pid file = /var/run/rsyncd.pid
# 任意のモジュール名(ミラー元から接続時の名前)
[backup]
	# ミラー先ディレクトリ
	path = /tmp/root
	# 接続許可ホスト(192.168.0.0/255.255.255.0でもよい)
	hosts allow = 192.168.0.0/24
        # 転送ログの記録
	transfer logging = yes
#	auth users = hoge
	# 更新許可。「no」でもOK
	read only = false
[html]
	comment = Webサイト
	path = /var/www/html
	hosts allow = 192.168.0.0/24
#	auth users = root
	read only = fales
 exclude、includeについて

 役割:
 除外ファイル・ディレクトリ(exclude)、含むファイル・ディレクトリ(include)の指定。ファイル・ディレクトリがコピーされようとするたびに記述されている順にチェックされる。該当したらすぐに適応され,コピーされない/される。

 書式:
 除外ファイル・ディレクトリ(exclude)、含むファイル・ディレクトリ(include)の指定。ファイル・ディレクトリがコピーされようとするたびに記述されている順にチェックされる。該当したらすぐに適応され、コピーされない/される。
  • 正規表現っぽいのが使える
  • 後方に/があればディレクトリ。なければファイル・ディレクトリが対象
      • exclude=public:publicというファイル・ディレクトリが対象
      • exclude=public/:pubicというファイルが対象
  • 前方に/が書いてあれば,基底ディレクトリ(pathで指定されたディレクトリ)からの絶対パスになる(ファイルシステムの絶対パスではないところに注意)
    • 例:path=/testとして
      • exclude=public/:publicというディレクトリが対象(後方/がなければファイル)
      • exclude=/public/:/test/publicというディレクトリが対象(後方/がなければファイル)
 rsyncd_confの詳細はこちらを参照してください。

●rsyncサーバ起動(ミラー先)

rsyncサーバー起動&自動起動設定
# chkconfig rsync on
自動起動の確認
# chkconfig --list rsync
rsync          	on
 rsyncd.confを書き換えた場合は、下記のようにリロードします。
# service xinetd reload
または
# /usr/bin/rsync --daemon --config=/etc/rsyncd.conf


 Fedora 21の場合

rsyncサーバー起動&自動起動設定
# systemctl enable rsyncd
自動起動の確認
# systemctl status rsyncd
rsyncd.service - fast remote file copy program daemon
   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled)
   Active: active (running) since 木 2015-04-09 09:18:51 JST; 3s ago
 Main PID: 18634 (rsync)
   CGroup: /system.slice/rsyncd.service
           └─18634 /usr/bin/rsync --daemon --no-detach
 rsyncd.confを書き換えた場合は、下記のようにリロードします。
# systemctl start rsyncd


 CentOS Stream 8、Rocky Linuxの場合

# dnf -y install rsync rsync-daemon
# systemctl enable --now rsyncd

# firewall-cmd --add-service=rsyncd --permanent
# firewall-cmd --reload
 
●lsyncdインストール(ミラー元):src版
# cd /usr/local/src
lsyncdインストールに必要なパッケージをインストール
# yum -y install libxml2-devel
lsyncdダウンロード
# wget http://lsyncd.googlecode.com/files/lsyncd-1.39.tar.gz
※最新版はダウンロードページで確認
lsyncd展開
# tar zxvf lsyncd-1.39.tar.gz
lsyncd展開先ディレクトリへ移動
# cd lsyncd-1.39
lsyncdインストール
# ./configure && make && make install
lsyncd.conf.xmlを所定のディレクトリへコピー
# cp lsyncd.conf.xml /etc/
lsyncd展開先ディレクトリを抜ける
# cd ..
lsyncd展開先ディレクトリを削除
# rm -rf lsyncd-1.39
ダウンロードしたファイルを削除
# rm -rf lsyncd-1.39.tar.gz
lsyncdログローテーション設定ファイル作成
# vi /etc/logrotate.d/lsyncd
/var/log/lsyncd {
missingok
notifempty
sharedscripts
postrotate
/etc/rc.d/init.d/lsyncd restart 2>&1 > /dev/null || true
endscript
}

●lsyncd設定(ミラー元):src版

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

 lsyncd-2.1.4からlsyncdのオプションが大きく変わってしまっています。lsyncd.confを設定する場合は注意してください。
 下記サイトが参考になります。
 Lsyncd - Live Syncing (Mirror) Daemon

<lsyncd version="1">
  <settings>
    <callopts>
      <option text="-%rlptgoD"/>
      <exclude-file/>
      <source/>
      <destination/>
    </callopts>
  </settings>
</lsyncd>
 ただしソース側でchmodをしてもイベントを拾わないので、すぐにはrsyncが実行されず権限が同期先に反映されないことを理解しておく必要があります。lsyncdではディレクトリ単位でrsyncを実行するので、同じディレクトリでファイルの変更等がおきることで副次的にそのディレクトリの他のファイルの権限変更が同期されることになります(rsyncで-pオプションを指定している場合)。
 実際の設定例は以下のとおりです。
lsyncd.conf.xml 編集
# vi /etc/lsyncd.conf.xml
<settings>
	# 有効化
        <pidfile      filename="/var/run/lsyncd.pid"/>
        <callopts>
		# オプション変更
                <option text="-lt%r"/>
                <option text="--delete"/>
                <exclude-file/>
                <file-filter/>
                <source/>
                <destination/>
        </callopts>
</settings>
<directory>
	# ミラー元ディレクトリ指定
        <source path="/tmp/root/"/>
    # ミラー先IPアドレス::ミラー先ディレクトリ指定(上記の場合は相対パス)
    # rsyncd.confで「auth users」を指定するとエラーとなる
    # 下記参照
        <target path="192.168.0.1::backup"/>
        <!--
        or it can also be an absolute path for localhost
        <target path="/absolute/path/to/target">
        -->
</directory>
<directory>
        <source path="/home/user/public_html/"/>
    # ミラー先IPアドレス::ミラー先ディレクトリ指定(上記の場合は相対パス)
    # rsyncd.confで「auth users」を指定するとエラーとなる
    # 下記参照
        <target path="192.168.0.1::backup"/>
        <target path="192.168.0.1::/var/www/html"/>
</directory>
# lsyncdログローテーション設定ファイル作成
# vi /etc/logrotate.d/lsyncd
/var/log/lsyncd {
    missingok
    notifempty
    sharedscripts
    postrotate
        /etc/rc.d/init.d/lsyncd restart 2>&1 > /dev/null || true
    endscript
}

●lsyncd起動

 起動用スクリプトを作成します。

 しかし、いつの間にがOSを再起動してもlsyncdが自動起動しなくなってしまったことに気がつきました(2011年9月)。そこで起動順序を変更するため「# chkconfig: 345 56 50」の箇所を「# chkconfig: 345 99 50」に変更。
# chkconfig lsyncd off
# chkconfig lsyncd on
を実施後、正常に自動起動するようになりました。
lsyncd起動スクリプト作成
# vi /etc/rc.d/init.d/lsyncd
#!/bin/bash
#
# lsyncd
#
# chkconfig: 345 56 50
# description: xinetd is a powerful replacement for inetd. \
# xinetd has access control mechanisms, extensive \
# logging capabilities, the ability to make services \
# available based on time, and can place \
# limits on the number of servers that can be started, \
# among other things.
#
# processname: /opt/lsyncd/binlsyncd

#Source function library
. /etc/rc.d/init.d/functions

PATH=$PATH:/sbin:/bin:/usr/bin:/usr/sbin:/opt/lsyncd/bin:/usr/local/bin

# Soruce networking configuration
[ -r /etc/sysconfig/lsync ] && . /etc/sysconfig/lsyncd

#option="$SHORT_LOG $IGNORE_START_ERRORS $DEBUG"

RETVAL=0

prog="lsyncd"

start(){
echo -n $"Starting $prog: "
#daemon $prog $option
daemon $prog
RETVAL=$?
echo
touch /var/lock/subsys/lsyncd
return $RETVAL
}

stop(){
echo -n $"Stopping $prog: "
killproc $prog
RETVAL=$?
echo
rm -f /var/lock/subsys/lsyncd
return $RETVAL

}

reload(){
echo -n $"Reloading configuration: "
killproc $prog -HUP
RETVAL=$?
echo
return $RETVAL
}

restart(){
stop
start
}

condrestart(){
[ -e /var/lock/subsys/lsyncd ] && restart
return 0
}


# See h
ow we were called. case "$
1" in start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart)
restart
;;
reload)
reload
;;
condrestart)
condrestart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
RETVAL=1
esac

exit $RETVA
作成したファイルに実行権を与え、起動スクリプトとして登録します。

lsyncd起動スクリプトへ実行権限付加
# chmod +x /etc/rc.d/init.d/lsyncd
lsyncd起動
# /etc/rc.d/init.d/lsyncd start
lsyncd起動スクリプトをchkconfigへ登録
# chkconfig --add lsyncd
lsyncd自動起動設定
# chkconfig lsyncd on

●lsyncdインストール(ミラー元):RPM版

 lsyncをRPMforgeからインストールします。

 lsyncd-2.1.4からlsyncdのオプションが大きく変わってしまっています。lsyncd.confを設定する場合は注意してください。
 下記サイトが参考になります。
 Lsyncd - Live Syncing (Mirror) Daemon

# yum --enablerepo=rpmforge -y install lsyncd
# cp /usr/share/doc/lsyncd/lrsync.lua /etc/lsyncd.conf
# vi /etc/lsyncd.conf 
#
変更
statusInterval = 1,
sync{
	default.rsync,
	# ミラー元ディレクトリ指定
	source="/var/www/html/",
	# ミラー先のホスト名/IPアドレス:(rsyncd.confで設定した名前)
	target="192.168.0.1::site",
	# 追記:rsync のオプション
	rsyncOpts="-az",
	# 追記:ミラー除外リスト
	excludeFrom="/etc/rsync_exclude.lst",
}
 lsyncd-2.1.xの場合
# vi /etc/lsyncd.conf 
settings = {
        logfile = "/var/log/lsyncd.log",
	# ステータス管理ファイルの指定
        statusFile = "/tmp/lsyncd.stat",
	# ステータスの更新頻度(秒)
        statusInterval = 1,
	# 起動時に接続に失敗した場合、再接続を試みる
        insist = 1,
	# lsyncdがrsyncを呼び出すまでの時間(秒)
        delay = 5,
}
sync{
        default.rsync, 
        source="/var/www/html/", 
        target="192.168.0.1::site", 
--      exclude={"/test/", "/test2/"},
--      /var/www/html/testディレクトリ及び/var/www/html/test2ディレクトリを除く
--      exclude="/test**",		ワイルドカードによる指定も可能
--      exclude="/*/",			サブディレクトリすべて
--      exclude={"*.log", "/*/"},	ファイル名にも指定可能
        rsync = {
            perms = true,
            owner = true,
            group = true,
            verbose = true,
        },
}
# /etc/rc.d/init.d/lsyncd start
Starting lsyncd:	[  OK  ]
# chkconfig lsyncd on
 複数のディレクトリを監視するにはsync {} ブロックを並べて記載します。

●source path、target pathの記載方法による挙動の違い

 source path、target pathの最後に「/」の記載有り無しでの挙動を確認してみました。デフォルトの設定は下記のとおりとします。
rsyncd.conf
# 任意のモジュール名(ミラー元から接続時の名前)
[backup]
    #  ← ミラー先ディレクトリ
    path = /root/backup
lsyncd.conf.xml
<directory>
        # ミラー元ディレクトリ指定
        <source path="/tmp/root/"/>
        # ミラー先IPアドレス::ミラー先のrsyncd.confでつけた名前
        <target path="192.168.0.1::backup"/>
</directory>
 上記の場合、/root/backup以下に同期されました。
 下記のように書き換えで、同期をさせた場合
<directory>
        # ミラー元ディレクトリ指定
        <source path="/tmp/root"/>
        # ミラー先IPアドレス::ミラー先のrsyncd.confでつけた名前
        <target path="192.168.0.1::backup"/>
</directory>
 /root/backup/root以下に同期されました。なお、上記の場合、rsyncd.confのpathに設定されているフォルダの最後の「/」の記載の有無に関わらず/root/backup/root以下に同期されます。
 また、このときはOpenSSHでの接続となりUIDで指定したユーザのパスワードを尋ねられるようになりました。「auth users」が設定されると、クライアントはモジュール接続時にユーザ名とパスワードの入力を要求される、そうです。
 何故、OpenSSHで接続されるのかは不明(デフォルト?)。
 OpenSSH接続での同期は問題ありませんが、同期のたびにパスフレーズを入力しなければならないのは非常に煩わしい作業です。これを解消するにはパスフレーズなしの鍵を作成する必要があります。
 パスフレーズなしでログインする方法を参照して、ミラー先のホストでlsyncdを動作させるユーザのホームディレクトリに鍵を作成してください。作成した「authorized_keys」「id_dsa」「id_dsa.pub」をミラー元の同じユーザのホームディレクトリの.ssh/に保存してください。
 また、sshd_configでパスフレーズなしを許可する必要があります。

●監視するファイル数制限を増やす

 監視するディレクトリ内のファイルが増えると、同期できなくなりログにエラーが記録されるようになります。
Tue Feb 22 14:09:07 2011: ERROR: Cannot add watch /path/to/source/foo/bar (28:No space left on device)
 監視するファイル数を増やすには inotify のカーネルパラメーターを増やします。
# vi /etc/sysctl.conf
fs.inotify.max_user_watches = 30000
 有効にするため、sysctl -p コマンドを実行します。
# sysctl -p
 なお、inotify 関連のカーネルパラメーターは /proc 以下のファイルに書かれています。
/proc/sys/fs/inotify/max_queued_events     16384
/proc/sys/fs/inotify/max_user_instances      128
/proc/sys/fs/inotify/max_user_watches       8192


●ログに出力されるエラー

 lsyncdをスタートさせましたが以下のようなエラーが/var/log/lsyncdに記録されました。

  • エラーその1

  •  下記の場合は、rsyncd.confのモジュールオプション「path」の設定で「=」が抜けていたのが原因です。
    @ERROR: chdir failed
    rsync error: error starting client-server protocol (code 5) at main.c(1506) [sender=3.0.7]
    
     以下のように変更したところ同期するようになりました。
    <target path="192.168.0.1::backup"/>
        
    <target path="192.168.0.1:backup"/>
    
  •  エラーその2
  • ERROR: module is read only
    rsync error: syntax or usage error (code 1) at main.c(747) [receiver=2.6.8]
    rsync: connection unexpectedly closed (4 bytes received so far) [sender]
    rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]
    
     この場合は、
    read only = false
        
    read only = no
    
    とします。

  • エラーその3

  •  rsyncd.confで「auth users」を設定すると下記のようなエラーが出力されました。
    Password: @ERROR: auth failed on module ******
    rsync error: error starting client-server protocol (code 5) at main.c(1506) [sender=3.0.7]
    

  • エラーその4

  •  このエラーはrsyncd.confに「auth users」を設定した時に発生します。
    # vi /etc/rsyncd.conf
    [user1]
    	comment = user1's Home Directory
    	path = /home/user1
    	hosts allow = 192.168.0.0/24
    	auth users = user1
    	secrets file = /etc/rsyncd.secrets
    	read only = no
    # vi /etc/lsyncd.conf.xml
    <directory>
            <source path="/tmp/user1/"/>
            <target path="192.168.0.1::user1"/>
    </directory>
    
     上記の設定で、lsyncdをリスタートさせたり、下記のコマンドをミラー元から実行した時にエラーが表示されます。
    user1権限で実行する場合:
    rsync -avx /tmp/user1/ 192.168.0.1::user1
    または
    rsync -avx --rsh=ssh /tmp/use1/ 192.168.0.1::user1
    root権限で実行する場合:
    rsync -avx /tmp/user1/ user1@192.168.0.1::user1
    表示されるエラー:
    Password: @ERROR: auth failed on module user1
    rsync error: error starting client-server protocol (code 5) at main.c(1506) [sender=3.0.7]
    Sat Mar  5 21:40:04 2011: Forked binary process returned non-zero return code: 5
    Sat Mar  5 21:40:04 2011: ERROR: Initial rsync from /tmp/user1/ -> 192.168.0.1::user1 failed.
    
     しかし、user1権限で下記のように実行すると同期が成功します。
    $ rsync -avx --rsh=ssh /tmp/user1/ 192.168.0.1:/home/user1/
    user1@192.168.0.1's password: 
    building file list ... done
    sent 90 bytes  received 20 bytes  44.00 bytes/sec
    total size is 6  speedup is 0.05
    

  • エラーその5

  •  5分毎に下記のようなエラーが発生する。これは「xymon」を利用してポート監視を実行しているためです。
    Jun 21 16:31:30 inu rsyncd[31642]: connect from inu.bigbang.dyndns.org (127.0.0.1)
    Jun 21 16:31:30 inu rsyncd[31642]: rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
    Jun 21 16:31:30 inu rsyncd[31642]: rsync error: error in rsync protocol data stream (code 12) at io.c(***) [Receiver=*.*.*]
    
     io.c(***) の「***」の数値は463や601等。
     [Receiver=*.*.*]の「*.*.*」の数値はrsyncのバージョン番号。

  • エラーその6
  • Feb  4 23:41:48 neko rsyncd[16922]: rsync: failed to set times on "." (in webdav): Operation not permitted (1)
    
     このエラーは同期先に書き込む権限がない場合に出力されます。/etc/rsyncd.confでのuidまたはgidを変更します。

  • エラーその7
  • Thu Nov 24 10:26:45 2016 Normal: Retrying startup of "/var/www/html/": 12
    Thu Nov 24 10:26:50 2016 Normal: recursive startup rsync: /var/www/html/ -> 192.168.0.12::html/
    Thu Nov 24 10:26:51 2016 Normal: Retrying startup of "/var/www/html/": 12
    Thu Nov 24 10:26:56 2016 Normal: recursive startup rsync: /var/www/html/ -> 192.168.0.12::html/
    Thu Nov 24 10:26:57 2016 Normal: Retrying startup of "/var/www/html/": 12
    Thu Nov 24 10:27:02 2016 Normal: recursive startup rsync: /var/www/html/ -> 192.168.0.12::html/
    Thu Nov 24 10:27:03 2016 Normal: Retrying startup of "/var/www/html/": 12
    Thu Nov 24 10:27:08 2016 Normal: recursive startup rsync: /var/www/html/ -> 192.168.0.12::html/
    
     調査したところ同期先のサーバの/var/log/cactiのログが大きくなりすぎ/(ルート)の使用領域が100%となっているためでした。原因であるcactiのログサイズを0バイトとしたところ正常に同期されるようになりました。
    Thu Nov 24 10:27:09 2016 Normal: Startup of "/var/www/html/" finished.
    
     実施した作業は下記のとおりです。
    (同期先)
    # cat /dev/null > /var/log/cacti/cacti.log
    # systemctl restart rsyncd
    (同期元)
    # systemctl restart lsyncd
    
     同期元の/var/log/lsyncd.logを確認し該当ファイルが同期されていることを確認しました。

    ●ディレクトリの除外方法

     lsyncd.conf内に記載する、同期ファイル除外設定は正常に動作しないようです(2023.09.12現在)。したがって、ミラー側(rsyncd.conf)で除外設定しています。

     以下の例では/var/www/html/が同期対象のディレクトリです。その配下にあるtest、test2ディレクトリを除外します。
    rsyncd.conf
    [hoge]
            path=/var/www/html/
            uid = hoge
            gid = hoge
            read only = false
            exclude from = /etc/rsyncd.exclude
    
     /etc/rsyncd.excludeの内容は下記のとおりです。
    - test
    - test2
    
     lsyncd-2.1.xの場合
    # vi /etc/lsyncd.conf
    settings {
            logfile = "/var/log/lsyncd.log",
            statusFile = "/tmp/lsyncd.stat",
            statusInterval = 1,
    }
    sync{
            default.rsync,
            source="/var/www/html/",
            target="192.168.0.1::site",
    	delete = false, # 同期先の削除無効
    --      exclude={"/test/", "/test2/"},
    --      /var/www/html/testディレクトリ及び/var/www/html/test2ディレクトリを除く
    --      exclude="/test**",          ワイルドカードによる指定も可能
    --      exclude="/*/",                      サブディレクトリすべて
    --      exclude={"*.log", "/*/"},   ファイル名にも指定可能
            rsync = {
                perms = true,
                owner = true,
                group = true,
                verbose = true,
            },
    }
    
     使用できるワイルドカードは
        ? - スラッシュ(/) を除く任意の 1 文字にマッチ
        * - スラッシュ(/) を除く任意の 0 文字以上にマッチ
        ** - スラッシュ(/) を含む任意の 0 文字以上にマッチ
     lsyncd の exclude を外部ファイルで指定する場合には "excludeFrom=ファイル名" を使用して宣言する。
     外部ファイルで指定する場合には + による include 設定は機能しない。'/' で終了している場合には除外ディレクトリと判定される。

    注意)除外するパターンマッチについて
     exclude="log"
    の除外指定を行なうと log(ファイル) , /log/ (ディレクトリ)が除外対象となる。
     つまり、/abc/log/ はマッチするので除外対象となるが /login/は除外対象にはならない。

    ●OSアップデート時の注意事項

     OSをアップデートするとrsyncd.confが差し替えられるので注意する必要があります。
     差し替えられたファイルは/etc/rsyncd.conf.rpmsaveです。これをコピーしrsyncを再起動すれば対応完了です。

    ●yum updateを実施後、lsyncdが動作しなくなった

     yum updateを実施したところlsyncdもアップデートされてしまい、そこから動作しなくなってしまいました。
    ※/var/log/messagesの抜粋
    May  1 09:22:19 neko yum[1518]: Updated: lsyncd-2.2.2-1.el7.x86_64
    May  1 09:22:33 neko lsyncd: Error: Do not use settings = { ... }
    May  1 09:22:33 neko lsyncd: please use settings{ ... } (without the equal sign)
    May  1 09:22:33 neko systemd: lsyncd.service: main process exited, code=exited, status=255/n/a
    May  1 09:22:33 neko systemd: Unit lsyncd.service entered failed state.
    May  1 09:22:33 neko systemd: lsyncd.service failed.
    
     どうもconfigの書き方がおかしいらしい。
     「settings = {」と言う記載を「settings {」に変更し、lsyncdを再起動したら今度は違うエラーが記録されました。
    ※/var/log/messagesの抜粋
    May  1 10:17:36 neko lsyncd: Error: error preparing /etc/lsyncd.conf: /etc/lsyncd.conf:9: setting "delay" unknown.
    May  1 10:17:36 neko systemd: lsyncd.service: main process exited, code=exited, status=255/n/a
    May  1 10:17:36 neko systemd: Unit lsyncd.service entered failed state.
    May  1 10:17:36 neko systemd: lsyncd.service failed.
    
     delayディレクティブの記載場所をsetteingsから各rsyncの{}内に記載したところ正常に起動するようになりました。

    ●Error: Terminating since out of inotify watches.

     /var/log/lsyncdに下記のようなログが記録される場合があります。
    Error: Terminating since out of inotify watches.
    Consider increasing /proc/sys/fs/inotify/max_user_watches
    
     これはinotifyで監視しているディレクトリ数が上限に達しているのが原因です。対処方法は「●監視するファイル数制限を増やす」を参照してください。