スポンサードリンク
1.概要
Solaris10では、SMF(Service Management Facility)というサービス管理機能が導入されました。
Solaris10では、多くのサービスが、SMF管理下になっています。
SMF管理下にあるサービスの状態を監視したり、管理したりするためには、SMFについての知識が必須です。
以下、Solaris10での、従来のサービス管理メカニズムとの互換性、ならびに、Solaris10で導入されたSMFについて説明します。
2.従来のサービス管理メカニズムとの互換性
2.1.概要
従来システムでは、/etc/inittab、/etc/rc?.d、/etc/inet/inetd.confのような設定ファイル、実行制御スクリプトを用いて、ランレベルを基本としたサービスの管理を行っていました。
Solaris10での、従来のサービス管理メカニズムとの互換性は以下のとおりです。
・ランレベル
Solaris10でも、8つ(0,1,2,3,5,6,S)のランレベルがあります。
・ /etc/inittab
互換性があります。ただし、inittabに追加されたサービスは、SMFサービスの後に実行されることに注意が必要です。
・/etc/rc?dのinitスクリプト
互換性があります。ただし、これらのinitスクリプトは、SMFサービスの後に実行されるようですので、他SMFサービスとの依存関係には注意が必要です。
・inetd.conf
これは、もはや使用されません。追加されたinetd.confの内容は、後述するinetconvで、SMFに変換が必要です。
従来のサービス管理メカニズムで起動されたサービスも、SMFでサービスの状態を表示できますが、他の変更はできません。
2.2. /etc/inittab
initデーモンは、inittabファイルから情報を読み取って、プロセスを起動します。
inittabファイルには、以下の情報が定義されています。
・起動・監視するプロセス、および停止時に再起動するプロセス
・システムが新しいランレベルに移行したときに行う処理
2.3. /etc/rc?.d
(1)概要
ランレベルを移行する場合、各ランレベルに対応する実効制御スクリプトを実行します。それらは、/sbinディレクトリにある、rc?(?=0,1,2,3,5,6,S)スクリプトです。
/sbinディレクトリ内の各rcスクリプトには、/etc/rc?.d(?=0,1,2,3,5,6,S)という名前のディレクトリが対応しており、その中にはそのランレベルの処理を実行するスクリプトが格納されています。
例えば、/etc/rc2.d/ディレクトリには、ランレベル2のプロセスを起動・停止するためのスクリプトがあります。
/etc/rc?.d内のスクリプトは、スクリプト名をASCII文字列としてソートした順に実行されます。
スクリプト名は、S+数字2桁で始まるか,K+数字2桁で始まるように、名前をつけます。
名前がKで始まるスクリプトを実行すると、サービスが停止(Kill)します。
名前がSで始まるスクリプトを実行すると、サービスが起動します。
(2)実効制御スクリプトの追加方法
実効制御スクリプトの実体は、/etc/init.dディレクトリにあります。スクリプトをここに追加します。
次に、適切な/etc/rc?.dディレクトリへのリンクを作成します。
# ln filename /etc/rc?.d/Snnfilename
# ln filename /etc/rc?.d/Knnfilename
(3)実行制御スクリプトの無効化方法
ファイルネームの先頭に下線(_)を付けることによって行います。
# mv filename _filename
(4)サービスの起動・停止方法
実効制御スクリプトを用いてのサービスの起動・停止方法は以下のようになります。
・停止
・起動
3.SMF(Service Management Facility)
3.1SMFの特徴
SMFの特徴は、以下のとおりです。
・サービスの監視、管理を、一貫したやり方で行える
サービスの有効化、無効化、再起動等を、一貫したコマンドで行えます。
・サービス間の依存関係を記述できる
依存関係の順番にサービスを起動します。
依存関係のない複数のサービスを並行起動し、大規模システムでのブートを迅速化します。
・サービスの自動再起動
管理エラー、ソフトウェアのバグ、修復不可能なハードウェアエラーなどの原因によって失敗したサービスを、依存関係の順番に自動的に再起動します。
・サービス構成リポジトリ
サービス構成は、サービス構成リポジトリと呼ばれるデータベースに格納されます。サービス構成リポジトリに対する操作は、必ずコマンドによって行うことになり、リポジトリファイルを直接編集することはできません。
・ルート以外のユーザーに対して管理者がタスクを安全に委譲する機能
RBAC(Role Base Access Control)権利プロファイルを使用してルート以外のユーザーに対して一部のSMFサービスの管理を許可することができます。
3.1サービス識別子
まず、サービスインスタンスを指定するために用いるサービス識別子について説明します。
各サービスインスタンスの名前は、障害管理リソース識別子(FMRI : Fault-Managed Resource Identifier)によって付けられます。
FMRIは、プレフィックス:サービス名:サービスインスタンス名という構成になっています。
・SMFサービスの場合
プレフィックスはsvcとなります。
例えば、rloginサービスのFMRIは、svc:/network/login:rloginとなります。
network/loginはサービスを、rloginはサービスインスタンスをそれぞれ示します。
また、通常、サービス名には一般的な機能カテゴリが含まれます。カテゴリには、以下のものがあります。
application,device,milestone,network,platform,site,system
・inetdサービスの場合
/etc/inetd.confに示されたサービスをSMFに変換したinetdサービスの構文は次のようになります。
svc:network/service-name/protocol
また、rpcプロトコルを使用するサービスの構文は次のようになります。
svc:network/rpc-service-name/rpc_protocol
ここで、service-name
例えば、cvspserverサービスのFMRIは、svc:/network/cvspserver/tcp:defaultとなり、rpc 100068/2-5サービスのFMRIは、svc:/network/rpc-100068_2-5/rpc_udp:defaultとなります。
・従来サービスの場合
従来のinit.dスクリプトは、プレフィックスがlrcとなります。
例えば、/etc/rc2.d/S73cachefs.daemonスクリプトのFMRIは、lrc:/etc/rc2_d/S73cachefs_daemonとなります。サービスインスタンス部はありません。
・マイルストンサービスの場合
マイルストンサービスとは、システムのランレベルに対応するサービスです。
以下のような関係があります。
ランレベル SMFマイルストン
S svc:/milestone/single-user:default
2 svc:/milestone/multi-user:default
3 svc:/milestone/multi-user-server:default
これらのサービスは、サービスの依存関係の記述によって、事前に起動すべきサービスを規定します。それらのサービスが起動した後、対応するランレベルのinitスクリプトを実行することになります。
・省略形
利用するコマンドによっては、省略形のFMRIを使用できる場合があります。
例えば、svcsコマンドでは、svc:/network/smtp:sendmailのFMRIに対して、以下の省略形を使用できます。
sendmail
:sendmail
smtp
smtp:sendmail
network/smtp
3.2. サービスインスタンスの状態表示
(1)svcsコマンドによる、サービスインスタンスの状態表示
svcsコマンドを利用すると、inetdによって制御されるサービスも含めて、その状態を表示できます。
svcsコマンドでは、STATE(サービスインスタンスの状態)、STIME(開始時刻)、およびFMRIを表示します。
STATEは、以下のいずれかになります。
・degrated - 有効だが、限られた能力で実行している
・disabled - 無効で、実行されていない
・legacy_run - 従来のサービス
・maintenance - 管理者が解決しなければならないエラーが発生
・offline - 有効だが、実行されていないか、利用できる状態にない
・uninitialized - すべてのサービスの構成が読み込まれる前の初期状態
・有効化されているサービスインスタンスのリスト
$ svcs
例)
STATE STIME FMRI
legacy_run 8:49:36 lrc:/etc/rc2_d/S10lu
legacy_run 8:49:37 lrc:/etc/rc2_d/S20sysetup
...
legacy_run 8:49:45 lrc:/etc/rc3_d/S90samba
online 8:48:56 svc:/system/svc/restarter:default
online 8:49:01 svc:/milestone/name-services:default
...
online 8:49:46 svc:/system/zones:default
offline 8:49:06 svc:/application/print/ipp-listener:default
offline 8:49:31 svc:/application/print/rfc1179:default
・全て(無効化されているものを含む)のサービスインスタンスのリスト
$ svcs -a
例)
STATE STIME FMRI
legacy_run 8:49:36 lrc:/etc/rc2_d/S10lu
legacy_run 8:49:37 lrc:/etc/rc2_d/S20sysetup
...
legacy_run 8:49:45 lrc:/etc/rc3_d/S90samba
disabled 8:48:57 svc:/system/metainit:default
disabled 8:48:57 svc:/platform/sun4u/mpxio-upgrade:default
...
disabled 8:49:31 svc:/network/apocd/udp:default
online 8:48:56 svc:/system/svc/restarter:default
online 8:49:01 svc:/milestone/name-services:default
...
online 8:49:46 svc:/system/zones:default
offline 8:49:06 svc:/application/print/ipp-listener:default
offline 8:49:31 svc:/application/print/rfc1179:default
・サービスおよび、サービスインスタンスの詳細情報
$ svcs -l FMRI
例)
fmri svc:/network/smtp:sendmail
name sendmail SMTP mail transfer agent
有効 true
状態 online
next_state none
state_time 2005年04月06日 (水) 08時49分36秒
logfile /var/svc/log/network-smtp:sendmail.log
リスタータ svc:/system/svc/restarter:default
contract_id 47
dependency require_all/refresh file://localhost/etc/mail/sendmail.cf (online)
dependency require_all/refresh file://localhost/etc/nsswitch.conf (online)
dependency optional_all/none svc:/system/filesystem/autofs (online)
dependency require_all/none svc:/system/filesystem/local (online)
dependency require_all/none svc:/network/service (online)
dependency require_all/refresh svc:/milestone/name-services (online)
dependency optional_all/refresh svc:/system/identity:domain (online)
dependency optional_all/none svc:/system/system-log (online)
・失敗しているあるいは、他のサービス実行を妨げているサービスインスタンスの説明
$ svcs -x
例)
svc:/application/print/server:default (LP print server)
状態: 2005年04月06日 (水) 08時49分05秒 以降disabledです
原因: 管理者が使用不可にしました。
参照: http://sun.com/msg/SMF-8000-05
参照: lpsched(1M)
影響: 2 個の依存サービスが動作していません (表示するには、-v を使用)。
・依存関係の表示
FMRI
$ svcs -d FMRI
例)
STATE STIME FMRI
online 8:49:01 svc:/milestone/name-services:default
online 8:49:14 svc:/milestone/single-user:default
online 8:49:15 svc:/system/filesystem/local:default
online 8:49:23 svc:/network/rpc/bind:default
online 8:49:24 svc:/milestone/sysconfig:default
online 8:49:26 svc:/network/inetd:default
online 8:49:26 svc:/system/utmp:default
online 8:49:33 svc:/network/nfs/client:default
online 8:49:35 svc:/system/system-log:default
online 8:49:36 svc:/network/smtp:sendmail
FMRI
$ svcs -D FMRI
例)
STATE STIME FMRI
disabled 8:49:00 svc:/network/dhcp-server:default
online 8:49:45 svc:/milestone/multi-user-server:default
・svcsコマンドのその他のオプション
-v :より多くの情報の表示
-p :プロセス情報の表示
(2)inetadmコマンドによる、inetdによって制御されるサービスインスタンスの状態表示
inetadmコマンドを用いると、inetdによって制御されるサービスインスタンスの状態表示を行うことができます。
例)
ENABLED STATE FMRI
enabled online svc:/network/rpc/gss:default
...
disabled disabled svc:/network/rpc/rex:default
...
enabled offline svc:/application/print/rfc1179:default
...
enabled online svc:/network/cvspserver/tcp:default
3.2. サービスインスタンスの管理
・サービスインスタンスの有効化
サービスが一旦有効になると、そのサービスの依存関係に問題がない限り、その有効な状態はシステムのブート後も維持されます。
ただし、-tオプションを付けると、システムブートまでの一時的な期間だけ、有効化します。
#svcadm enable FMRI
例)
STATE STIME FMRI
disabled 12:06:02 svc:/network/smtp:sendmail
# svcadm enable sendmail
# svcs sendmail
STATE STIME FMRI
online 12:08:01 svc:/network/smtp:sendmail
・サービスインスタンスの無効化
サービスが一旦無効になると、その無効な状態はシステムのブート後も維持されます。
ただし、-tオプションを付けると、システムブートまで、一時的に無効化します。
#svcadm disable FMRI
例)
STATE STIME FMRI
online 12:08:01 svc:/network/smtp:sendmail
# svcadm disable sendmail
# svcs sendmail
STATE STIME FMRI
disabled 12:09:07 svc:/network/smtp:sendmail
・サービスインスタンスの再起動
#svcadm restart FMRI
例)
STATE STIME FMRI
online 12:22:05 svc:/network/smtp:sendmail
# svcadm restart sendmail
# svcs sendmail
STATE STIME FMRI
online 12:22:31 svc:/network/smtp:sendmail
(開始時刻が更新されています。)
3.3. その他のサービス構成リポジトリの管理
・マニフェスト(xml形式で記述されたサービス構成目録)
マニフェストからリポジトリへのインポート
# svccfg import マニフェストファイル
リポジトリからマニフェストへのエクスポート
# svccfg export FMRI
・プロファイル(デフォルト状態で、どのサービスを有効にするか等を記述したファイル)
プロファイルの抽出
# svccfg extract
プロフィルの適用
# svccfg apply プロファイルファイル
・サービスインスタンスのプロパティの編集
1)svccfgコマンドを使用する
例)
svc:> select network/http:apache2
svc:/network/http:apache2> editprop
ここでエディタが起動するので、内容を編集する。
2)inetadmコマンドを使用する
inetdによって制御されるサービスインスタンスの場合には、inetadm -mコマンドが利用できる。
例)
default tcp_trace=FALSE
# inetadm -m svc:/network/telnet:default tcp_trace=TRUE
# inetadm -l telnet:default | grep tcp_trace
tcp_trace=TRUE
・inetd.confの変換
inetconvコマンドによって、inetd.confのエントリを、SMFのマニフェストに変換し、リポジトリへインポートします。
例)
3.4. 関連するディレクトリ、ファイル等
/etc/svc/repository.db :サービス構成リポジトリ
/var/svc/manifest :サービスインスタンス毎のマニフェスト、カテゴリ別のディレクトリ構成となっている
/var/svc/log :サービスインスタンス毎のログファイル
/var/svc/profile :プロファイル