ちょっと硬派なコンピュータフリークのBlogです。

カスタム検索

2008-09-30

SMFで楽々プロセス管理

Solaris 10がリリースされてから随分経つが、目玉機能の一つであるSMFがあまり利用されてないように思う。理由は恐らく次のようなことからだろう。
  • ドキュメントが乏しい(または難解である)
  • XMLを編集しなければならないのが煩わしい
  • 既存の仕組み(init.d)でも別に問題がない
しかしSMFは使いこなせば非常に有用なツールである。最も便利だと思うのは、プロセスが停止してしまった時に自動的に再起動してくれる点だ。世の中のすべてのプログラムにはバグがあり、バグによりプロセスが停止することは世の常である。従って、システム管理者たるものプロセスをすぐさま再起動するような仕組みを設けていなければならない。

既存の仕組みではそのようなことをシステムレベルで実装することができず、従って独自のプロセス監視方法などを導入する必要があった。しかしSMFを使えばその仕組みを比較的簡単に実装することができる。SMFはOpenSolarisでも利用可能であり、SMFにサービスを対応させる価値は大いにあるだろう。

SMFを利用するのに必要なものは次の2つである。
  • プロセス起動・停止のためのスクリプト
  • マニフェストと呼ばれる設定ファイル(XML)
起動・停止のためのスクリプトではstart、stop、refreshという3つの引数をサポートしていれば何でも良い。しかもrefreshはオプションであり、別になくとも良い。従って既存の/etc/init.dスクリプトなども活用することが可能である。ちなみに、SMFではLinuxのserviceコマンドで用いられるスクリプトのようにstatusは引数としてサポートしていない。それでどうやってプロセスを監視できるのかというと、単に子プロセスとしてSMFがすべてのサービスを監視しているだけである。元々UNIX系のOSには子プロセスの追跡をする機能が備わっているので、その機能を使えばプロセスの終了は非常に高速に検知される。(ただしそれ以上の監視機能は今のところ実装していないため、より高度なサービス監視を行いたい場合には、別途監視サービスを登録するなどの対処をするといいだろう。)

システムのデフォルトでは、/lib/svc/methodにスクリプトが配置されている。新たに自分でサービスを追加したい時には、この辺にあるスクリプトを参考にして作成するといいだろう。起動・停止をするだけのスクリプトであれば、どのようなアプリケーションであれ簡単に作成できるはずだ。自分で作成したスクリプトの置き場所は別にどこでも良い。

次に、マニフェストと呼ばれる設定ファイルを作成する。これもシステムのデフォルトのものを参考にして作成するといい。/var/svc/manifest配下にあるXMLファイル群がそうである。また、以下のページに各種既存アプリケーション向けのマニフェスト集があるので、これらを活用するといいだろう。
http://opensolaris.org/os/community/smf/manifests/

マニフェストを/var/svc/manifestの配下にコピーしよう。このディレクトリにはマニフェストがカテゴリごとに分けて格納されているので、適切なサブディレクトリにマニフェストをコピーすること。カテゴリはマニフェストの中でも記載されている。得にどのカテゴリにしなければいけないという制約はないので、分かりやすいカテゴリをつけるといいだろう。ファイルを置けば、次の手順によりサービスを有効化するだけである。(network/memcachedの例)

rootユーザになる
shell> su -

マニフェストをインポートする
shell# svccfg import /var/svc/manifest/network/memcached.xml

サービスを起動する
shell# svcadm enable memcached

ステータス確認
shell# svcs -av|grep memcached

欲張って難しいことをしなければ意外と簡単である。

以下、memcached用のサンプルである。各種パラメータは適宜調整して使用してもらいたい。よく落ちると評判(?)のmemcachedもこれで少しは手間いらずか?

起動・停止スクリプト
マニフェスト

0 コメント:

コメントを投稿