Linuxデーモンプラグラムの多重起動を防止する方法

先のSampleデーモンの起動スクリプトでは、プロセスの複数起動を許可している。
プログラム内部で多重起動防止用の仕組みを入れることができない場合、init.dフォルダにあるデーモン起動用スクリプト内で多重起動を防止する方法を以下に示す。

デーモンの起動時には、「ロックファイル」が作成されます。
(デーモンが強制終了した際、「サブシテムがロックファイルを・・・」と出るものです。)
この「ロックファイル」のファイル名称はスクリプト内で定義しています。

以下のスクリプトは開始(start)時に、「ロックファイル」があるかどうかを見て、あった場合は、「●● is started」と表示し起動しないようにしています。


#!/bin/sh
# sample Daemon script
#
# chkconfig: – 55 45
# description: Starts and stops the sample daemons.
#
# processname: sample
# config: /usr/local/sample/sample.ini
# pidfile: /var/run/sample.pid

. /etc/rc.d/init.d/functions

sampled=${SAMPLED-/usr/local/sample/sampled}
prog=”sample”
config=${CONFIG-/usr/local/sample/sample.conf}
pidfile=${PIDFILE-/var/run/sample.pid}
lockfile=${LOCKFILE-/var/lock/subsys/sample}
STOP_TIMEOUT=${STOP_TIMEOUT-10}

start() {
#    [ ! -f $PID] || exit 1
if [ -f $lockfile ]; then
echo $”$prog is Started”
exit 1
fi
    echo -n $”Starting $prog: ”
daemon –pidfile=${pidfile} $sampled $config
RETVAL=$?
[ $RETVAL = 0 ] && touch ${lockfile}
echo
return $RETVAL
}

stop() {
echo -n $”Stopping $prog: ”
#killproc -p ${pidfile} -d ${STOP_TIMEOUT} $sampled
killproc -d ${STOP_TIMEOUT} $sampled
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile}
return $RETVAL
}
case “$1″ in
start)
start
;;
stop)
stop
;;
status)
status $prog
RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if [ -f $lockfile ]; then
stop
start
fi
;;
reload)
action $”Reloading $prog: ”
;;
*)
echo $”Usage: $0 {start|stop|restart|reload|condrestart|status}”
exit 1
esac

exit $RETVAL

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください