Go to main content
Oracle® Solaris 11.3 でのシステムサービスの開発

印刷ビューの終了

更新: 2016 年 11 月
 
 

複数のマニフェストを使用したサービスの作成

新しいパッケージに、サービスのカスタムで構成されたインスタンスが必要な場合、そのパッケージは、ほかのサービスを変更せずにカスタムインスタンスのみを提供できます。

複数のマニフェストを使用してサービスを定義すると、親サービスを変更せずに、必要に応じてサービスインスタンスのみを提供できます。たとえば、サービス 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 サービスには、次のインスタンスとマニフェストが含まれています。

svc:/system/console-login:default

マニフェスト /lib/svc/manifest/system/console-login.xml は、サービス定義、テンプレート、および default インスタンスを提供します。

svc:/system/console-login:terma

マニフェスト /lib/svc/manifest/system/console-login-terma.xml は、console-login サービスの terma インスタンスを提供します。

svc:/system/console-login:termb

マニフェスト /lib/svc/manifest/system/console-login-termb.xml は、console-login サービスの termb インスタンスを提供します。

svc:/system/console-login:vt?

マニフェスト /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>

追加のインスタンス vt2vt3vt4vt5、および 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>

インスタンス vt3vt4vt5、および 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

defaultterma、および termb インスタンスは system/core-os パッケージによって提供されます。vts インスタンスは system/virtual-console パッケージによって提供されます。console-login:default インスタンスが存在することを確認するために、system/virtual-console パッケージには、system/core-os パッケージへの require 依存関係が含まれています。

サービスに含まれているインスタンスが 1 つのみの場合、ベストプラクティスは、単一のマニフェストを使用してサービスを指定することです。サービス定義が含まれているマニフェストで 1 つのインスタンスを定義します。