以前、CentOSでlsyncdを使った同期の記事でも試したことがあるlsyncdですが、当時は、サブディレクトリには対応してい等、あまり使い勝手がよくなかったのですが、現在は対応しているようなので、再度試してみました。

尚、利用したCentOSは下記となります。

SUZ-LAB謹製 CentOS AMI (6.2.1 64bit ap-northeast-1)

それでは、はじめにインストールについてですが、lsyncdはyumで簡単に入れることができます。

# yum -y install lsyncd

次に下記のような設定ファイル(/etc/lsyncd.conf)を用意します。

settings = {
   logfile    = "/var/log/lsyncd.log",
   statusFile = "/var/log/lsyncd.status",
   nodaemon   = true,
}

echo = {
    maxProcesses = 1,
    onStartup = "/bin/echo telling about ^source",
    onAttrib  = "/bin/echo attrib ^pathname",
    onCreate  = "/bin/echo create ^pathname",
    onDelete  = "/bin/echo delete ^pathname",
    onModify  = "/bin/echo modify ^pathname",
    onMove    = "/bin/echo move ^o.pathname -> ^d.pathname",
}

sync{
    echo,
    source = "/tmp/src/",
    target = "/tmp/dst/",
}

これは対象のディレクトリでファイル操作をした時に、標準出力に情報を出力するだけの設定となります。

そして、この状態でlsyncdを起動します。

# lsyncd /etc/lsyncd.conf
17:23:09 Normal: Event Blanket spawns action '/bin/echo telling about ^source'
telling about /tmp/src/
17:23:09 Normal: Startup of '/tmp/src/' finished.
# touch /tmp/src/sample.txt

上記のように、対象ディレクトリにファイルを作成すると、下記のようなログが出力されます。

17:24:40 Normal: Event Create spawns action '/bin/echo create ^pathname'
create /sample.txt
17:24:40 Normal: Finished Create on /tmp/src//sample.txt = 0
17:24:40 Normal: Event Modify spawns action '/bin/echo modify ^pathname'
modify /sample.txt
17:24:40 Normal: Finished Modify on /tmp/src//sample.txt = 0

サブディレクトリに対してファイルを作成しても、同様にログが出力できていることが確認できます

# touch /tmp/src/sub/sample.txt
17:24:48 Normal: Event Create spawns action '/bin/echo create ^pathname'
create /sub/sample.txt
17:24:48 Normal: Finished Create on /tmp/src//sub/sample.txt = 0
17:24:48 Normal: Event Modify spawns action '/bin/echo modify ^pathname'
modify /sub/sample.txt
17:24:48 Normal: Finished Modify on /tmp/src//sub/sample.txt = 0

最後に下記のような起動スクリプトを作っておくことで、起動時にlsyncdを有効にすることも可能です。

#!/bin/bash
#
# lsyncd        lsyncd
#
# chkconfig: 2345 99 10
# description: lsyncd

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

prog=lsyncd
lock=/var/lock/subsys/$prog
pid=/var/run/lsyncd.pid

# Source config
if [ -f /etc/sysconfig/$prog ] ; then
    . /etc/sysconfig/$prog
fi

start() {
    echo -n $"Starting $prog: "
    $prog -pidfile $pid /etc/lsyncd.conf >> /var/log/lsyncd.log 2>&1 &
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch $lock
    return $RETVAL
}

stop() {
    echo -n $"Shutting down $prog: "
    kill `cat /var/run/lsyncd.pid`
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f $lock
    [ $RETVAL -eq 0 ] && rm -f $pid
    return $RETVAL
}

case "$1" in
    start)
        start
        RETVAL=$?
        ;;
    stop)
        stop
        RETVAL=$?
        ;;
    restart)
        stop
        start
        RETVAL=$?
        ;;
    status)
        status -p $pid -l $lock $prog
        RETVAL=$?
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|status}"
        RETVAL=1
esac

exit $RETVAL

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら