以前、CentOSでlsyncdを使った同期の記事でも試したことがあるlsyncdですが、当時は、サブディレクトリには対応してい等、あまり使い勝手がよくなかったのですが、現在は対応しているようなので、再度試してみました。
尚、利用したCentOSは下記となります。
それでは、はじめにインストールについてですが、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