Solaris サービス管理機能は、「サービス」と呼ばれる持続的に実行されるアプリケーションを提供するためのプログラミングモデルを定義します。また、この機能は、サービスを実行するためのインフラストラクチャーも提供します。サービスは、実行中のアプリケーション、デバイスのソフトウェア状態、その他の一連のサービスのいずれかを表現できます。このフレームワーク内では、サービスは「サービスインスタンス」オブジェクトとして表現されます。これは、サービスオブジェクトの子になります。インスタンスオブジェクトは、親であるサービスオブジェクトの構成を継承または上書きできます。これにより、複数のサービスインスタンス間で構成情報を共有することができます。すべてのサービスオブジェクトとインスタンスオブジェクトは、一連の構成情報を表現した単一の「スコープ」内に格納されます。ローカル Solaris インスタンスの構成は「localhost」スコープと呼ばれますが、これが現在サポートされている唯一のスコープとなります。
各サービスインスタンスの名前は、障害管理リソース識別子 (Fault Management Resource Identifier、FMRI) に基づいて、スキーマ「svc:」を使って付けられます。たとえば、システム起動時に起動される syslogd(1M) デーモンは、次のような名前を持つデフォルトサービスインスタンスです。
svc://localhost/system/system-log:default svc:/system/system-log:default system/system-log:default
上の例では、「default」がインスタンス名、「system/system-log」がサービス名になります。サービス名は、スラッシュ (/) で区切られた複数のコンポーネントから構成される場合があります。最後のコンポーネントを除くすべてのコンポーネントは、そのサービスの「カテゴリ」を構成します。サイト固有のサービスの名前は、「site」で始まるカテゴリを使って付けることをお勧めします。
サービスインスタンスは、有効化または無効化されます。すべてのサービスは、svcadm(1M) コマンドを使って有効化または無効化できます。
システム上の管理対象サービスインスタンスを一覧表示するには、svcs(1) コマンドを使用します。
サービスインスタンスは、サービスまたはファイルに対する依存関係を持つ可能性があります。これらの依存関係により、サービスがいつ起動され、いつ自動的に停止されるかが左右されます。サービスが有効化されていてもその依存関係が満たされていない場合、そのサービスはオフライン状態に保たれます。その依存関係が満たされると、そのサービスは起動されます。起動が成功すると、そのサービスはオンライン状態に移行します。依存関係が満たされるかどうかは、サービスの次のタイプによって決まります。
引用されているすべてのサービスが実行中 (オンライン、機能低下のいずれか) の場合、または指定されているすべてのファイルが存在している場合に満たされます。
引用されているサービスのいずれかが実行中 (オンライン、機能低下のいずれか) の場合、または指定されているファイルの少なくとも 1 つが存在している場合に満たされます。
引用されているサービスが実行中 (オンライン、機能低下のいずれか) の場合、または管理作業が行われないためにそれらのサービスが実行されていない場合 (つまり、管理作業が行われないために起動されない依存関係に対して待機状態にあるために、それらのサービスが無効、保守、存在しない、またはオフライン状態になっている場合) に満たされます。
引用されているすべてのサービスが無効になっているか保守状態にある場合、または引用されているサービスまたはファイルが存在していない場合に満たされます。
require_all、require_any、optional_all のいずれかの依存関係から引用されている特定のサービスが、いったん実行中 (オンライン、機能低下のいずれか) になったあとで停止または更新された場合、SMF は、そのサービスが停止した理由とその依存関係の restart_on 属性に基づいて、サービスを停止するかどうかを決定します。
| restart_on 値 イベント | none error restart refresh -----------------------+--------------------------------------- エラーによる停止 | いいえ はい はい はい エラー以外による停止 | いいえ いいえ はい はい 更新 | いいえ いいえ いいえ はい
あるサービスがエラーによって停止したとみなされるのは、コアダンプなどのハードウェアエラーやソフトウェアエラーがそのサービスで発生した場合です。exclude_all 依存関係の場合、引用されているサービスが起動され、かつ restart_on 属性が none 以外になっている場合にサービスが停止されます。
特定のサービスの依存関係を一覧表示するには svcs(1) または svccfg(1M) を、それらを変更するには svccfg(1M) を、それぞれ使用します。
各サービスは特定のリスタータによって管理されます。マスターリスタータ svc.startd(1M) は、一連のサービスインスタンスとその依存関係の状態をすべて管理します。マスターリスタータは、自身のサービスに代って各種処理を行うほか、特定アプリケーションクラス向けの特定実行環境を提供できる委任リスタータを制御します。たとえば、inetd(1M) は委任リスタータであり、入力ファイル記述子と出力ファイル記述子で表されるネットワーク接続から成る初期環境を、自身のサービスインスタンスに対して提供します。inetd(1M) に委任された各インスタンスは、オンライン状態になっています。ある特定のインスタンスのデーモンが実行されていなくても、そのインスタンスを実行することは可能です。
依存関係が満たされるには、各インスタンスがオンライン状態に移行する必要があります。このため、svc.startd(1M) は、ほかのインスタンスの起動メソッドを呼び出すか、委任リスタータにそうするように指示します。これらの処理はオーバーラップする可能性があります。
現在のサービス群およびそれらに関連付けられたリスタータを確認するには、svcs(1) を使用します。すべてのリスタータが使用する共通の構成については、smf_restarter(5) を参照してください。
各サービスまたはサービスインスタンスは、サービスの起動、停止、および更新 (省略可能) を行う一連のメソッドを定義する必要があります。svc.startd(1M) および類似の fork(2)-exec(2) リスタータに対するメソッド規約のより完全な説明については、smf_method(5) を参照してください。
レガシー構成情報を取得してリポジトリ内に格納するメソッドなど、各種の管理メソッドについては、svccfg(1M) のマニュアルページを参照してください。
特定のサービスのメソッドを一覧表示したり変更したりするには、svccfg(1M) コマンドを使用します。
各サービスインスタンスは常に明確に定義された特定の状態にありますが、どの状態になるかは、その依存関係、メソッドの実行結果、および契約ファイルシステムからのイベントの受信可能性によって決まります。定義されている状態は、次のとおりです。
これは、すべてのサービスインスタンスの初期状態です。インスタンスは、svc.startd(1M) または適切なリスタータによって評価された結果、保守、オフライン、無効のいずれかの状態に移行します。
インスタンスは有効になっていますが、まだ実行中でも実行可能でもありません。リスタータがあるサービスの起動メソッドまたはそれと同等のメソッドを正常に実行できた場合、そのインスタンスはオンライン状態に移行します。失敗した場合は通常、機能低下、保守のいずれかの状態に移行することがあります。管理作業を行うと未初期化状態に移行する可能性があります。
インスタンスは有効になっており、実行中であるか実行可能になっています。オンライン状態の具体的な内容はアプリケーションモデルに固有であり、サービスインスタンスを管理するリスタータによって定義されます。オンラインは、適切に構成されたサービスのすべての依存関係が満たされた場合に予想される動作状態です。インスタンスで障害が発生すると、機能低下、保守のいずれかの状態に移行する可能性があります。インスタンスが依存するサービスで障害が発生すると、オフライン、機能低下のいずれかの状態に移行する可能性があります。
インスタンスは有効になっており、実行中であるか実行可能になっています。ただし、通常の動作と比較すると、インスタンスはある制限された機能レベルで動作しています。インスタンスで障害が発生すると、保守状態に移行する可能性があります。インスタンスが依存するサービスで障害が発生すると、オフライン、機能低下のいずれかの状態に移行する可能性があります。機能が回復すると、オンライン状態に移行します。
インスタンスは有効になっていますが、実行可能ではありません。インスタンスをオフライン状態やさらに先の状態に回復させるには、管理作業が必要となります。何らかの管理操作を実施中の場合、この保守状態に一時的に達する場合があります。
インスタンスは無効になっています。サービスを有効化するとオフライン状態に移行し、最終的には、すべての依存関係が満たされた時点でオンライン状態に移行します。
この状態は、サービス管理機能によって管理されていないレガシーインスタンスを表します。この状態のインスタンスはある時点で起動されたものですが、それが実行中かどうかはわかりません。この機能を使って行えるのは、インスタンスの監視だけであり、ほかの状態に移行させることはできません。
状態の移行には、結果的に元の状態に戻るようなものもあります。
これまでに説明した依存関係、メソッド、委任リスタータ、およびインスタンス状態は、サービスまたはサービスインスタンスのプロパティーまたはプロパティーグループとして表現されます。サービスまたはサービスインスタンスは、任意の数のプロパティーグループを、アプリケーションデータの格納先として持つことができます。プロパティーグループをこのような方法で使用すれば、リポジトリがこの機能内のすべてのデータに対して提供する属性を、アプリケーションの構成情報から導き出すことができます。また、アプリケーションは、service_bundle(4) DTD の適切なサブセットを使ってフレームワーク内の自身の構成データを表現することもできます。
プロパティーの検索は合成されます。あるプロパティーグループとプロパティーの組み合わせがサービスインスタンス上で見つからなかった場合、libscf(3LIB) の大部分のコマンドや高レベルインタフェースは、その同じプロパティーとプロパティーグループの組み合わせを、そのインスタントを含むサービス上で検索します。この機能により、共通の構成をサービスインスタンス間で共有することが可能になります。この合成は、サービスインスタンスとその親であるサービスとの間の一種の継承関係として捉えることができます。
プロパティーは、承認されていないプロセスによる変更から保護されます。smf_security(5) を参照してください。
リポジトリ内の各インスタンスに関する履歴データが、サービス管理機能によって管理されます。このデータは、管理上の検査やロールバック向けの読み取り専用スナップショットとして利用可能となります。利用可能なスナップショットタイプは次のとおりです。
管理者によって作成されたかパッケージインストール中に生成されたインスタンスの初期構成。
svccfg(1M) によるインポート処理中に取得されたサービスマニフェストによって規定される構成。このスナップショットは、プロパティーのカスタマイズを決定するための基準を提供します。
元に戻す管理操作を実行する際に取得された、その時点における構成。
インスタンスの実行中の構成。
オンライン状態への正常移行中に取得された構成。
svccfg(1M) コマンドを使用すれば、スナップショットを操作できます。
プロパティーグループの中には、「非持続的」とマークされているものがあります。それらのグループはスナップショット内にバックアップされず、その内容はシステムブート中にクリアされます。そのようなグループは一般に、システムの再起動時に消えてもかまわないようなアクティブプログラム状態を保持します。
サービスやサービスインスタンスに関連付けられたプロパティーに加え、各サービスインスタンスの現在の状態が、svc.configd(1M) が管理するシステムリポジトリ内に格納されます。このリポジトリはトランザクション管理に対応しており、個々のサービスやサービスインスタンスに関連付けられたプロパティーやプロパティーグループの、以前のバージョンを提供できます。
サービス管理機能データ用のリポジトリを管理するには、svc.configd(1M) を使用します。
構成リポジトリ内に格納されている、サービスまたはサービスインスタンスに関連付けられた情報は、XML ベースのファイルとしてエクスポートできます。サービスバンドルと呼ばれるそれらの XML ファイルは移植性に優れており、バックアップ用途に適しています。サービスバンドルは次のいずれかのタイプに分類されます。
特定のサービス群またはサービスインスタンス群に関連付けられたプロパティーをすべて含んだファイル。
一連のサービスインスタンスと各インスタンス上で有効化されているプロパティーの値を含んだファイル。
特定のリポジトリに対してサービスバンドルのインポート、エクスポートを行うには、svccfg(1M) コマンドを使用します。サービスバンドルのファイル形式や作成時のガイドラインについては、service_bundle(4) を参照してください。
「サービスアーカイブ」 は、リポジトリ内の各サービスの説明とその持続プロパティーを含む XML ファイルです。サービス状態などの一時プロパティーは含まれません。このサービスアーカイブは基本的に、各サービスに対する「svccfg エクスポート」です。なお、対象となるサービスは名前付きのサービスに限定されません。
/etc/rc?.d ディレクトリ内の起動プログラムは、対応する実行レベルのマイルストーンの一部として実行されます。
/milestone/single-user:default
/milestone/multi-user:default
/milestone/multi-user-server:default
各プログラムの実行は特定の機能限定版のサービスインスタンスとして表現され、プログラムのパスに基づいて命名されます。これらのインスタンスは、特殊な状態であるレガシー実行状態に保たれます。
これらのインスタンスは有効なプロパティーを持たず、一般に svcadm(1M) コマンドを使って操作することもできません。これらのプログラムについては、エラー診断や再起動は行われません。