2012年5月13日日曜日

CentOS6.2に"lsyncd"をインストール

スズキです。

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

利用したCentOSはこちらのものとなります。
SUZ-LAB謹製 CentOS AMI (6.2.1 64bit ap-northeast-1)
まずはインストールですが、"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
そしてようやく、"lsyncd"をトリガーにしてS3にアップロードに...
--------
http://www.suz-lab.com

0 コメント: