[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[postfix-jp: 2548] Re: LDAP サーバ障害時の対策



松元です。

らむじぃ様、神戸様:
In article <20070319122040.783E.RAMSY@xxxxxxxx>
>> このロジックじゃダメでしょ。
>> 全然lockになってない。
>> 
>> 多重起動したときに
>> > if [ ! -f /var/lock/subsys/check-ldap ]; then
>> と
>> >     touch /var/lock/subsys/check-ldap
>> の間で入れ違いになってlock作られても検出できませんよ?
>> (touchは、既存ファイルがあってもエラーになりません)
>> 
>> shell scriptでやるならsymlinkを貼るという1行為を使うべきでしょう。

ありがとうございます。symlinkを使ったlockについては技術的文献を探しま
したが、良い物がなかったため、他のスクリプトの見よう見まねで作ってみま
した。問題があれば指摘ください。

------------------------------------
rootのcrontabあたりに仕込んでください。
3-59/5 * * * * /usr/local/sbin/check-ldap.sh

------------------------------------
#!/bin/sh

HOME=/
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
export HOME PATH

#
# getent passwd の返り値の閾値。ユーザ数が指定した数(行数)以下になる
# とエラーにする。数値は環境に合わせて適切に。
# 
GETENT_LIMIT=500

#DEBUG
#GETENT_LIMIT=600

#
#  Ref: http://www.postfix-jp.info/ML/arc-2.3/msg00456.html
#  * Subject: [postfix-jp: 2457] Re: LDAP サーバ障害時の対策
#
# 存在するか調査するID。
# 
CHECK_USERS="user1 user2 user3"

#DEBUG
#CHECK_USERS="hogehoge guestguest"

LOCKFILE="/var/lock/subsys/check-ldap"

#############################
stop_postfix () {
    	/etc/rc.d/init.d/postfix stop
}

rm_lock ()
{
    #
    # Symlinkなら削除(本来なら-Lだけで十分だが、念のため-fでもテストする)
    #
    if [ -L ${LOCKFILE} -o -f ${LOCKFILE} ]; then
	rm -f ${LOCKFILE}
    fi
}

check_id_postfix () {
    /usr/bin/id $1 > /dev/null 2>&1
    RETVAL=$?
    if [ ${RETVAL} -ne 0 ]; then
	stop_postfix
	echo "ERROR: May Be down LDAP. Dose not exist " $1
	rm_lock
	exit
    fi
}

#############################

#
# 二重起動のチェック
# 

ln -s /dummy_lock_file ${LOCKFILE} > /dev/null 2>&1
RETVAL=$?
if [ ${RETVAL} -ne 0 ]; then
	echo "ERROR: Can not create lock file"
	exit
fi

#sleep 1

#
# ${CHECK_USERS}で指定したIDが存在するかをテストする。
#

for N in ${CHECK_USERS} ; do
    check_id_postfix $N
done

#
#  getent passwd の返り値のテスト。行数が想定数より
#  少ないとエラー
#

PASSWD_C=`/usr/bin/getent passwd | wc -l `

if [ ${PASSWD_C} -lt ${GETENT_LIMIT} ]; then
	stop_postfix
	echo "ERROR: May Be down LDAP. Very few user :" ${PASSWD_C};
	rm_lock
	exit
fi

#
rm_lock
exit;

# EOF
--
松元隆二
_______________________________________________
Postfix-jp-list mailing list
Postfix-jp-list@xxxxxxxxxxxxxxxxxxxx
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list

References
[postfix-jp: 2546] Re: LDAP サーバ障害時の対策, YOSHIMURA Keitaro

[検索ページ] [Postfix-JP ML Home]