2010年2月17日水曜日

LSBスクリプトのルール

スズキです。

LSBスクリプトとは、CentOSなどで、httpdなどのサービスを起動するための、
"/etc/init.d/"以下にあるスクリプト群のことです。

そして、そのスクリプトには、以下のようなルールがあります。
http://www.clusterlabs.org/doc/en-US/Pacemaker/1.0/html/Pacemaker_Explained/ap-lsb.html

実際に、"/etc/init.d/mysqld"がそのルールにしたがっているかどうか、確認してみました。

> Start (stopped)
> /etc/init.d/some_service start ; echo "result: $?"
> Did the service start?
> Did the command print result: 0 (in addition to the regular output)?

サービスが停止しているときにスクリプト(start)を実行すると、終了コードは0。

【"/etc/init.d/mysqld"の場合】
# /etc/init.d/mysqld start ; echo "result: $?"
MySQL を起動中: [ OK ]
result: 0

問題ありません。

> Status (running)
> /etc/init.d/some_service status ; echo "result: $?"
> Did the script accept the command?
> Did the script indicate the service was running?
> Did the command print result: 0 (in addition to the regular output)?

サービスが実行しているときにスクリプト(status)を実行すると、終了コードは0。

【"/etc/init.d/mysqld"の場合】
# /etc/init.d/mysqld status ; echo "result: $?"
mysqld (pid 10399) を実行中...
result: 0

問題ありません。

> Start (running)
> /etc/init.d/some_service start ; echo "result: $?"
> Is the service still running?
> Did the command print result: 0 (in addition to the regular output)?

サービスが実行しているときにスクリプト(start)を実行すると、終了コードは0。

【"/etc/init.d/mysqld"の場合】
# /etc/init.d/mysqld start ; echo "result: $?"
MySQL を起動中: [ OK ]
result: 0

問題ありません。

> Stop (running)
> /etc/init.d/some_service stop ; echo "result: $?"
> Was the service stopped?
> Did the command print result: 0 (in addition to the regular output)?

サービスが実行しているときにスクリプト(stop)を実行すると、終了コードは0。

【"/etc/init.d/mysqld"の場合】
# /etc/init.d/mysqld stop ; echo "result: $?"
MySQL を停止中: [ OK ]
result: 0

問題ありません。

> Status (stopped)
> /etc/init.d/some_service status ; echo "result: $?"
> Did the script accept the command?
> Did the script indicate the service was not running?
> Did the command print result: 3 (in addition to the regular output)?

サービスが停止しているときにスクリプト(status)を実行すると、終了コードは3。

【"/etc/init.d/mysqld"の場合】
# /etc/init.d/mysqld status ; echo "result: $?"
mysqld は停止しています
result: 3

問題ありません。

> Stop (stopped)
> /etc/init.d/some_service stop ; echo "result: $?"
> Is the service still stopped?
> Did the command print result: 0 (in addition to the regular output)?

サービスが停止しているときにスクリプト(stop)を実行すると、終了コードは0。

【"/etc/init.d/mysqld"の場合】
# /etc/init.d/mysqld stop ; echo "result: $?"
MySQL を停止中: [失敗]
result: 1

☆ ルール違反です! ☆

ということで、このルール違反が、HeatbeatでMySQLでのフェイルオーバーで問題になってしまいます。

明日、サーバの冗長構成関係は、片付けてしまおう。

--------
http://www.suz-lab.com

0 コメント: