新しいパッケージに、サービスのカスタムで構成されたインスタンスが必要な場合、そのパッケージは、ほかのサービスを変更せずにカスタムインスタンスのみを提供できます。
複数のマニフェストを使用してサービスを定義すると、親サービスを変更せずに、必要に応じてサービスインスタンスのみを提供できます。たとえば、サービス S のインスタンス I のみがツール T で必要な場合は、ツール T は、サービス S を再度提供することなくインスタンス I を提供できます。ツール T がシステムにインストールされていない場合、サービス S がインストールされていても、インスタンス I もインストールされません。同様に、ツール T がアンインストールされると、インスタンス I はアンインストールされ、サービス S はまだインストールされたままになり、変更されません。サービス S はあるマニフェストで指定して、インスタンス I は別のマニフェストで指定してください。サービス S のマニフェストをあるパッケージで提供して、インスタンス I のマニフェストはツール T のパッケージで提供します。ツール T のパッケージには、サービス S を提供するパッケージへの依存関係があります。
複数のマニフェストを使用して単一のサービスを指定する場合、次のサービスマニフェストの設計を使用します。
1 つのマニフェストに、サービス定義、テンプレートデータ、およびデフォルトのインスタンスを含めます。
サービスの追加のインスタンスを定義する各マニフェストに、次を含めます。
サービス定義が含まれているマニフェストの場合と同じ service_bundle 要素を指定してから、include 属性を追加します。include 属性の値は、サービス定義が含まれているマニフェストの完全なファイル名です。
サービス定義が含まれているマニフェストの場合と同じ service 要素を指定します。service 要素内の name 属性の値は、サービス定義が含まれているマニフェストの場合と完全に同じです。
同じサービスまたはインスタンスを複数のマニフェストで提供しないでください。このタイプの競合が検出された場合、SMF は使用する定義を判別できず、インスタンスは保守状態になります。
複数のマニフェストで提供されるサービスの例は、svc:/system/console-login サービスです。console-login サービスには、次のインスタンスとマニフェストが含まれています。
マニフェスト /lib/svc/manifest/system/console-login.xml は、サービス定義、テンプレート、および default インスタンスを提供します。
マニフェスト /lib/svc/manifest/system/console-login-terma.xml は、console-login サービスの terma インスタンスを提供します。
マニフェスト /lib/svc/manifest/system/console-login-termb.xml は、console-login サービスの termb インスタンスを提供します。
マニフェスト /lib/svc/manifest/system/console-login-vts.xml は、console-login サービスの vts インスタンスを提供します。
サービス定義を含んでいるマニフェスト /lib/svc/manifest/system/console-login.xml には、次の行が含まれています。
<service_bundle type="manifest" name="SUNWcs:console"> <service name="system/console-login" type="service" version="1"> <instance name='default' enabled='true'> </instance>
追加のインスタンス vt2、vt3、vt4、vt5、および vt6 を定義するマニフェスト /lib/svc/manifest/system/console-login-vts.xml には、次の行が含まれています。
<service_bundle type="manifest" name="SUNWcs:console" include="/lib/svc/manifest/system/console-login.xml"> <service name="system/console-login" type="service" version="1"> <instance name='vt2' enabled='true'> <dependency name='system-console' grouping='require_all' restart_on='none' type='service'> <service_fmri value='svc:/system/console-login:default' /> </dependency> </instance>
インスタンス vt3、vt4、vt5、および vt6 の定義には、vt2 インスタンスについて示すように console-login:default への同じ依存関係が含まれています。
次の例に示すように、svcs コマンドの出力には依存関係が表示されます。
$ svcs 'svc:/system/console-login:vt*' STATE STIME FMRI online Dec_04 svc:/system/console-login:vt3 online Dec_04 svc:/system/console-login:vt5 online Dec_04 svc:/system/console-login:vt2 online Dec_04 svc:/system/console-login:vt4 online Dec_04 svc:/system/console-login:vt6 $ svcs -D console-login:default STATE STIME FMRI online Dec_04 svc:/system/vtdaemon:default online Dec_04 svc:/system/console-login:vt3 online Dec_04 svc:/system/console-login:vt5 online Dec_04 svc:/system/console-login:vt2 online Dec_04 svc:/system/console-login:vt4 online Dec_04 svc:/system/console-login:vt6 online Dec_04 svc:/system/console-reset:default $ svcs -d 'svc:/system/console-login:vt*' STATE STIME FMRI ... online Dec_04 svc:/system/console-login:default online Dec_04 svc:/system/vtdaemon:default
default、terma、および termb インスタンスは system/core-os パッケージによって提供されます。vts インスタンスは system/virtual-console パッケージによって提供されます。console-login:default インスタンスが存在することを確認するために、system/virtual-console パッケージには、system/core-os パッケージへの require 依存関係が含まれています。
サービスに含まれているインスタンスが 1 つのみの場合、ベストプラクティスは、単一のマニフェストを使用してサービスを指定することです。サービス定義が含まれているマニフェストで 1 つのインスタンスを定義します。