依存関係は、サービスインスタンスの状態遷移を制御します。依存関係の高度な説明については、サービス依存関係を参照してください。詳細な説明と、さまざまな種類の依存関係を指定する方法については、Oracle Solaris 11.3 でのシステムサービスの開発を参照してください。
次の図では、svc1:default、svc2:default、および svc3:default のサービスインスタンスは、起動するために、ほかのサービスまたはファイルなどのリソースを必要としていません。これらのインスタンスは、ほかのリソースを待機することなく、並列して起動し、それぞれの起動メソッドを実行し、オンライン状態に移行できます。svc4:default インスタンスは、svc2:default インスタンスがオンラインになるまで、その起動メソッドを実行できません。svc5:inst1 インスタンスには、svc2:default リソースと svc4:default リソースの両方が必要です。svc5:inst1 の svc4:default に対する依存関係はオプションの依存関係であり、svc4:default が有効かつオンライン、無効、または存在していないという状態のいずれかになっている場合に充足されます。svc5:inst1 インスタンスは、svc2:default がオンラインになるまで待機する必要があります。svc4:default が存在し有効である場合は、svc5:inst1 は svc4:default もオンラインになるまで待機する必要があります。svc4:default が存在し無効であったり、存在していない場合は、svc5:inst1 は svc4:default を待機する必要はありません。
図 2 サービス依存関係
各依存関係は、次のいずれかのグループに割り当てられます。グループは、そのグループ内の依存関係が充足される条件を定義します。
次の両方の条件を満たしている場合、この依存関係は充足します。
このグループ内のすべてのサービス依存関係が実行している (online または degraded)。
このグループ内のすべてのファイル依存関係が存在している。
次のどちらかの条件を満たしている場合、この依存関係は充足します。
このグループ内のサービス依存関係の少なくとも 1 つが実行している (online または degraded)。
このグループ内のファイル依存関係の少なくとも 1 つが存在している。
このグループ内のすべてのサービス依存関係がすべて次のどちらかの条件を満たしている場合、この依存関係は充足します。
サービスが実行している (online または degraded)。
サービスの実行に管理アクションが必要である。サービスは、存在していない、不完全である、disabled 状態である、maintenance 状態である、または offline 状態であり、起動には管理アクションが必要な依存関係を待機している。
このグループ内のファイル依存関係は存在していても、存在していなくても構いません。
サービスインスタンスが遷移中であり、起動に管理者の操作は不要である場合、この依存関係は充足されません。この場合、依存サービスは、この依存関係が起動するまで待機するか、管理アクションなしに依存関係を起動できないと判断するまで待機します。
次の両方の条件を満たしている場合、この依存関係は充足します。
このグループ内のすべてのサービス依存関係が、disabled 状態であるか、maintenance 状態であるか、または存在していない。
このグループ内のすべてのファイル依存関係が存在していない。
svcs -d コマンドは、特定のサービスが依存するサービスインスタンスを一覧表示します。
この例では、system-repository サービスが依存するサービスインスタンスを表示します。
$ svcs -d system-repository STATE STIME FMRI online Sep_09 svc:/milestone/network:default online Sep_09 svc:/system/filesystem/local:default online Sep_09 svc:/system/filesystem/autofs:default
svcs -l コマンドは、特定のサービスが依存するサービスも一覧表示します。-l オプションの出力では、依存関係の名前と状態に加え、依存関係のタイプ (つまりグループ) と、依存関係の restart_on プロパティーの値も表示されます。この例では、依存関係のうち 2 つが必須で、1 つがオプションです。これらのグループ内の依存関係が依存サービスに与える影響の詳細は、依存関係のグループを参照してください。依存関係の restart_on プロパティーのさまざまな値が依存サービスに与える影響の詳細は、依存関係のグループを参照してください。
$ svcs -l system-repository fmri svc:/application/pkg/system-repository:default name IPS System Repository enabled false state disabled next_state none state_time Mon Sep 09 18:42:28 2013 restarter svc:/system/svc/restarter:default manifest /lib/svc/manifest/application/pkg/pkg-system-repository.xml dependency require_all/error svc:/milestone/network:default (online) dependency require_all/none svc:/system/filesystem/local:default (online) dependency optional_all/error svc:/system/filesystem/autofs:default (online)
svcprop コマンドを使用して、これらの依存関係を一覧表示することもできます。この形式では、依存関係のグループと restart_on 値は別々の行に表示され、依存関係の状態は表示されません。
$ svcprop -g dependency system-repository:default network/entities fmri svc:/milestone/network:default network/grouping astring require_all network/restart_on astring error network/type astring service filesystem-local/entities fmri svc:/system/filesystem/local:default filesystem-local/grouping astring require_all filesystem-local/restart_on astring none filesystem-local/type astring service autofs/entities fmri svc:/system/filesystem/autofs:default autofs/grouping astring optional_all autofs/restart_on astring error autofs/type astring service
svcs -D コマンドは、特定のサービスに依存するサービスインスタンスを一覧表示します。
この例では、system-repository サービスに依存するサービスインスタンスを表示します。
$ svcs -D system-repository STATE STIME FMRI online 16:39:30 svc:/application/pkg/zones-proxyd:default
次のコマンドは、zones-proxyd が system-repository に依存していることを確認します。
$ svcs -do svc,desc zones-proxyd SVC DESC application/pkg/system-repository IPS System Repository system/filesystem/minimal minimal file system mounts milestone/network Network milestone
次のコマンドは、zones-proxyd が system-repository にどのように依存しているかに関する詳細を表示します。この出力の最終行には、zones-proxyd サービスには system-repository サービスが実行していることが必要であることが示され、system-repository が現在実行していることが示されています。この出力には、system-repository サービスがリフレッシュされると zones-proxyd サービスが再起動されることも示されています。
$ svcs -l zones-proxyd fmri svc:/application/pkg/zones-proxyd:defaulr name Zones Proxy Daemon enabled true state online next_state none state_time January 6, 2014 04:39:30 PM PST restarter svc:/system/svc/restarter:default manifest /lib/svc/manifest/application/pkg/zoneproxyd.xml dependency require_any/none svc:/system/filesystem/minimal (online) dependency require_any/error svc:/milestone/network (online) dependency require_all/restart svc:/application/pkg/system-repository (online)
依存関係のいずれかが停止またはリフレッシュしたときに再起動するように、実行中のサービスを構成できます。実行中のサービス (online または degraded 状態) は、その依存関係が充足されていないと、offline 状態に遷移します。依存関係が停止またはリフレッシュしたあとにサービスを再起動すると、依存関係が再度充足され、依存サービスは実行状態に戻ることがあります。
require_all、require_any、または optional_all の依存関係が停止またはリフレッシュしたあとで、サービスが再起動するかどうかは、次の要因によって決まります。
依存関係が停止またはリフレッシュしたかどうか。停止した場合、依存関係が停止した理由がハードウェア障害やコアダンプなどのエラーによるものか、管理アクションなどのほかの理由によるものか。
依存関係の restart_on 属性の値。可能な値は、none、error、restart、および refresh です。
次の表に示すように、依存関係の restart_on 属性の値が none である場合は、依存関係が停止またはリフレッシュしても依存サービスは再起動しません。依存関係の restart_on 属性の値が refresh である場合、依存関係が停止またはリフレッシュすると常に依存サービスは再起動します。restart_on の値が error である場合、エラーのために依存関係が停止した場合にのみ依存サービスは再起動します。restart_on の値が restart である場合、依存関係がリフレッシュした場合にのみ依存サービスは再起動します。
|
サービスが依存するインスタンスの一覧表示では、system-repository サービスに、2 つの require_all 依存関係と 1 つの optional_all 依存関係があることを示しています。次のコマンドは、milestone/network サービスまたは system/filesystem/autofs サービスがエラーのために停止した場合に、system-repository サービスが再起動し、ほかの理由でこれらのサービスが停止またはリフレッシュした場合には、再起動しないことを示します。system-repository サービスは、system/filesystem/local サービスが何らかの理由でリフレッシュまたは停止した場合、再起動しません。
$ svccfg -s system-repository:default listprop -o propname,propval '*restart_on' network/restart_on astring error filesystem-local/restart_on astring none autofs/restart_on astring error