トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

SMFによるサービス管理

概要

Solaris 10ではサービスの管理方法が大幅に変わりました。一部のサービスは従来のRCスクリプトを用いますが、多くのサービスはSMF(Service Management Facility)という仕組みで管理するようになりました。
SMFには以下のような機能があります。

  • サービスを一元管理できる
    • svcadm, svcsなどのコマンドでまとめてサービスを管理できます。
  • サービスの依存関係を記述できる
    • 従来のRCスクリプトではファイル名の数字で起動順序を指定していましたが、もっと柔軟にサービスの依存関係を記述できます。また、サービスの起動は並行的に行われるので起動時間も短縮されます。
  • プロセスが停止すると自動的に再起動する
    • SMFで起動したプロセスが停止すると自動的にサービスの再起動を行います。従来のようにkillコマンドなどでプロセスを停止させても自動的に再起動してしまうので注意が必要です。

コンセプトとしては、DJB氏のdaemontoolsに似ています。ちょっと取っつきづらいですが慣れれば従来のRCスクリプトよりむしろ楽なので利用する価値はあります。

SMFではサービスをFMRI(Fault Managed Resource Identifier)という名称で識別します。
たとえばSendmailは以下のようなFMRIで識別されます。

svc:/network/smtp:sendmail

FMRIは「smtp:sendmail」や「sendmail」など一部分で指定することもできます。

ディレクトリ構成

/lib/svc/method/

サービスの起動・停止などを行うスクリプトを置きます。スクリプトの内容は従来/etc/init.d以下に置かれていたRCスクリプトとほぼ同じです。

/var/svc/manifest/

サービスのマニフェストファイルを置きます。マニフェストファイルはサービスの起動・終了方法や依存関係を記述したXMLファイルです。

/var/svc/log/

サービス起動・停止のログが出力されます。

/etc/svc/

サービス構成リポジトリが置かれます。svccfgやsvcpropなどのコマンドを通して操作します。リポジトリのDBはsqliteが使われています。

主なコマンド

サービスの一覧を表示する

$ svcs

無効なサービスも含めて一覧を表示する

$ svcs -a

サービスの詳細を表示する

$ svcs -l FMRI

正常に動作していないサービスを表示する

$ svcs -xv

サービスを有効にする

# svcadm enable FMRI

サービスを一時的に有効にする

# svcadm -t enable FMRI

サービスを無効にする

# svcadm disable FMRI

サービスを一時的に無効にする

# svcadm -t disable FMRI

サービスを再起動する

# svcadm restart FMRI

サービスをリフレッシュする(設定ファイルを読み直す)

# svcadm refresh FMRI

マニフェストファイルをインポートする

# svccfg import file.xml

マニフェストファイルをエクスポートする

# svccfg export FMRI > file.xml

inetdが制御するサービスを表示する

# inetadm

inetd.confのエントリをSMFサービスマニフェストに変換する

Solaris 10では、inetdサービスもSMFで管理するようになりました。Solaris 10のinetdはinetd.confを読み込みません。新しくinetd.confにサービスを追加した後はinetconvコマンドでエントリをSMFサービスマニフェストに変換する必要があります。

# inetconv

補足

サービス自動再起動の条件

SMFでは起動スクリプトから起動されたプロセスがすべて終了した場合に障害とみなしサービスを再起動します。1つの起動スクリプトから複数のデーモンプロセスを起動しているような場合、デーモンプロセスが1つだけ終了してもサービスの再起動は行われません。複数のデーモンプロセスのうち1つだけが欠けてもサービスを再起動したい場合はプロセス毎に起動スクリプトを分ける必要があります。

マニフェストファイルのDTD

/usr/share/lib/xml/dtd/service_bundle.dtd.1 にあります。

リンク


最終更新時間:2007年09月20日 11時53分27秒