lsyncdを複数起動するtips。対象はCentOS 6以前です。
/etc/lsyncd.conf には複数設定を記載することが出来ますがサービスプロセスを分けてしまいたいことがあります。
CentOS 5および6ではepelにlsyncdのパッケージが用意されており簡単にインストールすることができますが、デフォルトの起動スクリプト(/etc/init.d/lsyncd)ではkillprocやstatusの引数にpidファイル等の引数が与えられておらず、そのままコピーしても複数起動時に問題が発生し正しく動作しません。
/etc/init.d/lsyncdをスクリプトを一部修正することで複数起動しても正しく動作するようになります。
以下に修正例を記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
#!/bin/bash # # chkconfig: - 85 15 # description: Lightweight inotify based sync daemon # # processname: lsyncd # config: /etc/lsyncd.conf # config: /etc/sysconfig/lsyncd # pidfile: /var/run/lsyncd.pid # Source function library . /etc/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 prog=`basename $0` PIDFILE=/var/run/${prog}.pid LSYNCD_CONF=/etc/${prog}.conf LSYNCD_OPTIONS="-pidfile ${PIDFILE} ${LSYNCD_CONF}" if [ -e /etc/sysconfig/${prog} ]; then . /etc/sysconfig/${prog} fi RETVAL=0 thelock=/var/lock/subsys/${prog} start() { [ -f ${LSYNCD_CONF} ] || exit 6 echo -n $"Starting $prog: " if [ $UID -ne 0 ]; then RETVAL=1 failure else daemon /usr/bin/lsyncd $LSYNCD_OPTIONS RETVAL=$? [ $RETVAL -eq 0 ] && touch $thelock fi; echo return $RETVAL } stop() { echo -n $"Stopping $prog: " if [ $UID -ne 0 ]; then RETVAL=1 failure else killproc -p ${PIDFILE} ${prog} RETVAL=$? [ $RETVAL -eq 0 ] && rm -f $thelock fi; echo return $RETVAL } reload(){ echo -n $"Reloading $prog: " killproc -p ${PIDFILE} ${prog} -HUP RETVAL=$? echo return $RETVAL } restart(){ stop start } condrestart(){ [ -e $thelock ] && restart return 0 } case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload) reload ;; condrestart) condrestart ;; status) status -p ${PIDFILE} -l ${thelock} ${prog} RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}" RETVAL=1 esac exit $RETVAL |
元のファイルからの修正箇所は下記のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
--- /etc/init.d/lsyncd 2014-11-19 00:50:04.000000000 +0900 +++ /etc/init.d/lsyncd_multi 2015-02-12 15:42:09.862326270 +0900 @@ -17,19 +17,21 @@ # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 -LSYNCD_OPTIONS="-pidfile /var/run/lsyncd.pid /etc/lsyncd.conf" +prog=`basename $0` +PIDFILE=/var/run/${prog}.pid +LSYNCD_CONF=/etc/${prog}.conf +LSYNCD_OPTIONS="-pidfile ${PIDFILE} ${LSYNCD_CONF}" -if [ -e /etc/sysconfig/lsyncd ]; then - . /etc/sysconfig/lsyncd +if [ -e /etc/sysconfig/${prog} ]; then + . /etc/sysconfig/${prog} fi RETVAL=0 -prog="lsyncd" -thelock=/var/lock/subsys/lsyncd +thelock=/var/lock/subsys/${prog} start() { - [ -f /etc/lsyncd.conf ] || exit 6 + [ -f ${LSYNCD_CONF} ] || exit 6 echo -n $"Starting $prog: " if [ $UID -ne 0 ]; then RETVAL=1 @@ -49,7 +51,7 @@ RETVAL=1 failure else - killproc lsyncd + killproc -p ${PIDFILE} ${prog} RETVAL=$? [ $RETVAL -eq 0 ] && rm -f $thelock fi; @@ -59,7 +61,7 @@ reload(){ echo -n $"Reloading $prog: " - killproc lsyncd -HUP + killproc -p ${PIDFILE} ${prog} -HUP RETVAL=$? echo return $RETVAL @@ -92,7 +94,7 @@ condrestart ;; status) - status lsyncd + status -p ${PIDFILE} -l ${thelock} ${prog} RETVAL=$? ;; *) |
変更点を簡単に説明するとkillprocやstatusといった/etc/init.d/functionsで定義されているファンクションでpidファイルやlockファイルを指定するように書き換えています。
又、コピーの際にpidファイル、confファイル、sysconfigファイルなどの書き換えを行わなくてもすむように定数を変数に置き換えています。
使用方法
/etc/init.d/lsyncd を上記の例の通り修正した上で、起動スクリプトをコピーします。
下記の例では lsyncd_2 という名前でコピーしています。
1 2 3 4 |
cp -p /etc/init.d/lsyncd /etc/init.d/lsyncd_2 touch /etc/lsyncd_2.conf /etc/sysconfig/lsyncd_2.conf sed -i -e '6,9s/lsyncd/lsyncd_backup/g' /etc/init.d/lsyncd_2 chkconfig --add lsyncd_2 |
新しい設定ファイル /etc/lsyncd_2.conf を編集します。
必要に応じて自動起動設定を行ってください。
1 2 3 |
chkconfig lsyncd_2 on chkconfig --list lsyncd_2 lsyncd_2 0:off 1:off 2:on 3:on 4:on 5:on 6:off |
この記事を書いた人

-
高校時代より独学でC、アセンブラを学ぶ。
パソコンスクール講師 → カノープス株式会社(現グラスバレー、MEDIAEDGE)を経て、当時の取締役の誘いでパクレゼルヴに入社する。
事業分社以前は事業部を統括。現グルーポン・ジャパン立ち上げ時のサーバーインフラなども担当。
分社化後は現社長の的場大昌に委ね技術者として専念する。
趣味は週末娘と遊ぶこと。
最新記事
開発日誌2015.02.12lsyncdを複数起動する
開発日誌2015.01.27lsyncdで複数サーバーをターゲットに同期する際のtips
開発日誌2015.01.26lsyncdを使う時はtimeoutを設定しましょう