ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
マニュアルページセクション 1M: システム管理コマンド Oracle Solaris 11.1 Information Library (日本語) |
- サービス管理機能のマスターリスタータ
/lib/svc/bin/svc.startd
svc:/system/svc/restarter:default
svc.startd はサービス管理機能 (SMF) のマスターリスタータデーモンであり、すべてのサービスのデフォルトリスタータです。svc.startd は、管理要求、システム障害、またはアプリケーション障害に基づいて、サービスの開始、停止、および再起動を行います。
svc.startd は、各サービスの依存関係に基づいて障害管理を担うほか、サービスの状態の維持も行います。
svc.startd はシステムの起動時に自動的に呼び出されます。なんらかの障害が発生した場合は再起動されます。直接 svc.startd を呼び出さないでください。
すべてのリスタータに共通する構成および動作の詳細については、smf_restarter(5) を参照してください。
svcs(1) は、サービス構成機能によって管理されているすべてのサービスについてステータスを報告します。svcadm(1M) を使用すると、サービスのリスタータに関連してサービスインスタンスを操作できます。
「SMF_」という接頭辞を持つ環境変数は予約済みであり、上書きが可能です。
svc.startd は、smf_method(5) で指定されている「SMF_」環境変数をメソッドに渡します。デフォルトでは、PATH は /usr/sbin:/usr/bin に設定されます。デフォルトでは、svc.startd に渡されるその他すべての環境変数は、init(1M) から継承されたものです。
重複するエントリは削減されて単一のエントリになります。使用される値は不定です。「<名前>=」という接頭辞を持たない環境エントリは無視されます。
svc.startd の構成はコマンド行オプションでは設定されません。代わりに、サービス構成リポジトリから構成が読み込まれます。svccfg(1M) を使用すると、すべてのオプションおよびプロパティーを設定できます。
次に示す options プロパティーグループ内の構成変数は、開発者および管理者が使用できます。
astring は、ブート中にコンソールに出力するメッセージのデフォルトレベルを示します (scf_value_is_type で定義される。scf_value_create(3SCF) を参照)。サポートされているメッセージオプションには、quiet と verbose があります。quiet オプションは、ブート中に最小限のメッセージをコンソールに出力します。verbose オプションは、開始されるサービスごとに 1 つのメッセージを出力して、成功または失敗を示します。boot -m オプションを使用すると、ブート時に boot_messages 設定をオーバーライドできます。kernel(1M) を参照してください。
svc.startd のグローバルサービスログ記録レベルを制御します。astring (scf_value_is_type で定義される。scf_value_create(3SCF) を参照) は、syslog (syslog(3C) を参照) および svc.startd のグローバルログファイル /var/svc/log/svc.startd.log に記録するメッセージのデフォルトレベルを示します。サポートされているメッセージオプションには、quiet、verbose、および debug があります。quiet オプションは、管理者の介入を必要とするエラーメッセージを、コンソール、syslog、および svc.startd のグローバルログファイルに送信します。verbose オプションは、管理者の介入を必要とするエラーメッセージをコンソール、syslog、および svc.startd のグローバルログファイルに、管理者の介入を必要としないエラーに関する情報を svc.startd のグローバルログファイルに、それぞれ送信します。さらに、サービスが起動されるたびに単一のメッセージがコンソールに送信されます。debug オプションは、svc.startd デバッグメッセージを svc.startd のグローバルログファイルに、管理者の介入を必要とするエラーメッセージをコンソール、syslog、および svc.startd のグローバルログファイルに、サービスが起動されるたびに単一のメッセージをコンソールに、それぞれ送信します。
デフォルトのブートレベルとして使用するマイルストーンを決定する FMRI です。指定できるオプションは、次に示すメジャーマイルストーンです。
svc:/milestone/single-user:default svc:/milestone/multi-user:default svc:/milestone/multi-user-server:default
あるいは特殊値 all または none も指定できます。all は、すべてのサービスに依存する理想化されたマイルストーンを表します。none は、マスター svc:/system/svc/restarter:default 以外にはどのサービスも実行されていない、特殊なマイルストーンです。デフォルトでは、svc.startd は、すべてのサービスに依存する統合的なマイルストーン all を使用します。このプロパティーが指定された場合、inittab(4) の initdefault 設定はすべてオーバーライドされます。
再構成リブートが要求されたことを示します。再構成リブートに応じて動作する必要のあるサービスでは、このプロパティーが存在し 1 に設定されているかどうかをチェックして、再構成ブートが要求されたかどうかを確認できます。
このプロパティーは svc.startd によって管理されます。管理者はこのプロパティーを変更しないでください。
svc.startd を無効にするなどの構成エラーは、syslog によってログに記録されますが、無視されます。
svc.startd によって管理されるサービスは、smf(5) で説明されている状態のいずれかになります。このリスタータによって状態の定義が変更されることはありません。
管理対象サービスによって実行されるログ記録のほかに、svc.startd には、サービスの報告およびログ記録を行う共通のメカニズムが用意されています。
報告機能プロパティー svc.startd は、管理しているすべてのサービスについて、共通のプロパティーセットを更新します。これらのプロパティーは、サービスインスタンスの状態に基づいてアクションを実行するための共通インタフェースとして使用できます。svcs(1) コマンドを使用すると、これらのプロパティーを簡単に表示できます。
インスタンスの現在の状態および次の状態 (移行中の場合)。
現在のインスタンス状態について詳細情報を示す説明文。svc.startd によって管理されるサービスには、次に示す補助状態を使用できます。
fault_threshold_reached stop_method_failed administrative_request custom
custom
restarter/auxiliary_custom_state が custom に設定されているときは、現在のインスタンス状態について詳細情報を示す、メソッド提供の説明文。
restarter/auxiliary_custom_state が custom に設定されているときは、現在のインスタンス状態について詳細情報を示す、メソッド提供の文字列。
restarter/auxiliary_custom_state が custom に設定されているときは、restarter/auxiliary_reason がローカライズされる可能性がある、メソッド提供の textdomain。
現在の状態に到達した時間。
サービスインスタンスを実行しているプライマリプロセス契約 ID (存在する場合)。
ログ
デフォルトでは、svc.startd は、メソッドの標準出力および標準エラーのファイル記述子に加えて、サービスに対する重要なリスタータアクションを /var/svc/log/service:instance.log に記録します。/var/svc/log/svc.startd.log や syslog など、システムのグローバルな場所へのロギングレベルは、options/logging プロパティーによって制御されます。
svc.startd によって管理されるサービスを開発または構成するとき、サービスインスタンスとリスタータの相互作用を操作するために、一連の共通プロパティーが使用されます。
メソッド
svc.startd で提供されている fork/exec モデル用メソッドの一般的な形式は、smf_method(5) に示されています。svc.startd によって管理されるサービスでは、次に示すメソッドが必須メソッドまたは省略可能メソッドとしてサポートされています。
サービスを中断することなく、リポジトリまたは config ファイルから適切な構成パラメータを読み込み直します。多くの場合、これはシステムデーモン用の SIGHUP を使用して実装されます。再起動しないとサービスが構成の変更を認識できない場合、refresh メソッドは提供されません。
このメソッドは省略可能です。
サービスを開始します。アプリケーションがコンシューマに対して利用可能になったときに初めて成功を返します。競合するインスタンスがすでに実行されている場合や、サービスを開始できない場合は、失敗を返します。
このメソッドは必須です。
サービスを停止します。場合によっては、一部またはすべてのサービスがすでに停止されているときに stop メソッドを呼び出すこともできます。メソッドが戻るときにサービスが完全に停止していない場合だけ、エラーを返します。
このメソッドは必須です。
サービスが必須メソッド内で何もアクションを実行する必要がない場合、そのメソッドに :true トークンを指定する必要があります。
svc.startd は、サービスや特定のメソッドに対して指定されたメソッドコンテキストをすべて尊重します。smf_method(5) で説明されているメソッド拡張トークンは、svc.startd によって呼び出されるすべてのメソッドで使用できます。
プロパティー
smf(5) で使用できる一般的なプロパティーの概要。これらの一般的なプロパティーは、次のような特定の方法で svc.startd と対話します。
enabled が true に設定されている場合、リスタータは、サービスの依存関係がすべて満たされるとサービスの開始を試みます。false に設定されている場合、サービスは実行されず、無効にされた状態のままになります。
この FMRI プロパティーが空または svc:/system/svc/restarter:default に設定されている場合、サービスは svc.startd によって管理されます。それ以外の場合は、指定されたリスタータが (利用可能になったときに) サービスの管理を担当します。
single_instance が true に設定されている場合、svc.startd は、常にこのサービスの 1 つのインスタンスのみ、オンラインまたは機能低下状態に移行することを許可します。
また、svc.startd によって管理されるサービスは、下記に示す省略可能プロパティーを startd プロパティーグループ内に定義できます。
duration プロパティーは、サービスのモデルを定義します。このプロパティーは、transient、wait とも呼ばれる child モデルサービス、または contract (デフォルト) に設定できます。
ignore_error プロパティーは、設定されている場合、無視するイベントをコンマ区切りのリストで指定します。このリストで有効な文字列値は core と signal です。デフォルトでは、すべてのエラーで再起動が行われます。
need_session プロパティーが true に設定されている場合は、インスタンスを独自のセッションで起動する必要があることを示します。デフォルトでは、そのようにはなりません。
utmpx_prefix 文字列プロパティーは、メソッドを実行する前にインスタンスに有効な utmpx エントリが必要であることを定義します。デフォルトでは、utmpx エントリは作成されません。
サービスは、smf_method_exit() を使用して、進行中の状態遷移の特殊な考慮事項をリクエストすることがあります。smf_method_exit() を使用せずに exit() によってそのようなリクエストが行われる場合、次の「サービス障害」で説明されるように処理されます。
start または refresh メソッドが $SMF_EXIT_TEMP_DISABLE をリクエストすると、svc.startd はサービスを一時的に無効にし、stop メソッドを実行せずに無効状態にします。start または refresh メソッドが stop メソッドを明示的に呼び出して、すべてのプロセスを正常にシャットダウンする場合、$SMF_EXIT_TEMP_DISABLE を返す前に開始している可能性があります。
contract サービスが start または refresh メソッドから $SMF_EXIT_TEMP_TRANSIENT をリクエストすると、svc.startd は、現在進行中の状態転移を完了させ、サービスを transient サービスと同様に処理します。
stop メソッドが $SMF_EXIT_TEMP_DISABLE または $SMF_EXIT_TEMP_TRANSIENT をリクエストすると、svc.startd は、$SMF_EXIT_ERR_OK を返した場合と同様に処理します。
contract 以外のサービスが start または refresh メソッドから $SMF_EXIT_TEMP_TRANSIENT をリクエストすると、svc.startd は、$SMF_EXIT_ERR_OK を返した場合と同様に処理します。
「サービスメソッドの特殊リクエスト」で説明されている条件下を除き、ゼロ以外の出口コードが返された場合、または指定されたタイムアウトの期限が切れる前に完了できなかった場合、svc.startd はメソッドが失敗したと想定します。$SMF_EXIT_ERR_CONFIG または $SMF_EXIT_ERR_FATAL が返された場合、svc.startd はすぐにサービスを保守状態にします。その他すべての障害では、svc.startd はサービスをオフライン状態にします。サービスがオフラインの場合で、その依存関係が満たされているときは、svc.startd は再びサービスの開始を試みます (smf(5)を参照)。
contract または transient サービスが、その定義済みのタイムアウトが経過する前に起動メソッドから戻らない場合、svc.startd はそのメソッドに SIGKILL を送信し、サービスをオフライン状態に戻します。
障害が 5 回連続して発生した場合、またはエラーのためにサービスが 10 分経過する間に複数回再起動されている場合、svc.startd はサービスを保守状態にします。
サービス障害の条件は、startd/duration プロパティーで定義されるサービスモデルと、startd/ignore_error プロパティーの値との組み合わせによって定義されます。
次に示す条件のいずれかが発生すると、contract モデルサービスは障害状態になります。
サービスのすべてのプロセスが終了する
サービスのプロセスのいずれかでコアダンプが生成される
サービス外部のプロセスからサービスプロセスに致命的な信号が送信される (たとえば、管理者が pkill コマンドを使用してサービスプロセスを終了する)
startd/ignore_error に core または signal、あるいはその両方を指定すると、サービスでは最後の 2 つの条件を無視できます。
サービスを transient として定義すると、svc.startd はそのサービスのプロセスを追跡しません。したがって、contract モデルサービスについて記述されている潜在的な障害は、transient サービスについては障害と見なされません。transient サービスは、メソッド失敗条件のいずれかが発生した場合だけ保守状態になります。
wait モデルサービスは、サービスに関連付けられている子プロセスが終了するたびに再起動されます。「wait」モデルサービスの場合、子プロセスの終了はエラーとは見なされず、障害が繰り返し発生しても保守状態への移行にはつながりません。
svc.startd は、起動時の実行レベル移行中に呼び出されるサービスを引き続きサポートしています。同等の実行レベルのマイルストーンを構成しているすべての管理対象サービスがオンライン状態に移行したあと、各 /etc/rc?.d ディレクトリが処理されます。/etc/rc?.d ディレクトリにある標準の init スクリプトは、そのシーケンス番号の順に実行されます。
マイルストーンと実行レベルのマッピングは次のとおりです。
シングルユーザー (S)
マルチユーザー (2)
ネットワークサービス付きマルチユーザー (3)
また、svc.startd は、スクリプトごとに 1 つのインスタンスをリポジトリに挿入することにより、これらのレガシーサービスが SMF で表示されるようにします。これらのレガシーインスタンスは、svcs(1) などの標準の SMF インタフェースを使用して表示でき、常に LEGACY-RUN 状態で表示されます。変更したり、ほかのサービスの依存関係として指定したりすることはできません。管理者に役立つように、レガシーサービスの初期の開始時間が取り込まれます。
svc.startd がログファイルを格納するディレクトリ。
/var が読み書き用にマウントされる前のブートの初期段階で svc.startd がログファイルを格納するディレクトリ。
例 1 詳細ログをオンに設定する
詳細ログをオンに設定するには、次のように入力します。
# /usr/sbin/svccfg -s system/svc/restarter:default svc:/system/svc/restarter:default> addpg options application svc:/system/svc/restarter:default> setprop options/logging = \ astring: verbose svc:/system/svc/restarter:default> exit
この要求は、次に svc.startd を再起動したときに有効になります。
属性についての詳細は、マニュアルページの attributes(5) を参照してください。
|
svcs(1), svcprop(1), kernel(1M), init(1M), svcadm(1M), svccfg(1M), svc.configd(1M), setsid(2), syslog(3C), libscf(3LIB), scf_value_create(3SCF), smf_method_exit(3SCF), contract(4), init.d(4), process(4), inittab(4), attributes(5), smf(5), smf_method(5)