Solaris のシステム管理 (基本編)

第 19 章 サービスの管理 (手順)

この章では、サービス管理機能 (Service Management Facility: SMF) の管理と監視に必要となる作業について説明します。さらに、実行レベルスクリプトの管理方法に関する情報も提供します。次の項目について説明します。

サービスの管理 (作業マップ)

次の作業マップに、SMF を使用するために必要な手順を示します。

作業 

説明 

参照先 

サービスインスタンスの状態を表示します。 

実行中のすべてのサービスインスタンスの状態を表示します。 

「サービスの状態を一覧表示する方法」

特定のサービスに依存するサービスを表示します。 

指定されたサービスに依存するサービスを表示します。 

「特定のサービスに依存するサービスを表示する方法」

特定のサービスが依存するサービスを表示します。 

指定されたサービスが依存するサービスを表示します。この情報があれば、特定のサービスが起動できない原因を特定しやすくなります。 

「特定のサービスが依存するサービスを表示する方法」

サービスインスタンスを無効にします。 

正常に動作していないサービスや、セキュリティーを高めるためにオフにする必要があるサービスを無効にします。 

「サービスインスタンスを無効にする方法」

サービスインスタンスを有効にします。 

特定のサービスを起動します。 

「サービスインスタンスを有効にする方法」

サービスインスタンスを再起動します。 

無効化と有効化に各コマンドを使用することなしにサービスを再起動します。 

「サービスを再起動する方法」

サービスインスタンスを変更します。 

指定されたサービスインスタンスの設定パラメータを変更します。 

「サービスを変更する方法」

 

inetd によって制御されるサービスの設定プロパティーを変更します。

inetd 制御サービスのプロパティーを変更する方法」

 

inetd によって制御されるサービスの起動オプションを変更します。

inetd 制御サービスのコマンド行引数を変更する方法」

inetd.conf エントリを変換します。

inetd サービスを、SMF で監視可能な従来の実行サービスに変換します。

inetd.conf エントリを変換する方法」

破壊されたサービス設定リポジトリを修復します。 

破壊されたリポジトリをデフォルトのバージョンと交換します。 

「破壊されたリポジトリを修復する方法」

どのサービスも起動しないでシステムをブートします。 

ブートを妨げている設定の問題を解決できるように、どのサービスも起動せずにシステムをブートします。 

「どのサービスも起動しないでブートする方法」

SMF サービスの監視

次の各作業は、SMF サービスの監視方法を示したものです。

Procedureサービスの状態を一覧表示する方法

この手順は、実行中のサービスを表示する場合に使用できます。

  1. svcs コマンドを実行します。

    オプションを指定しないでこのコマンドを実行した場合、FMRI で指定されたサービスの状態レポートが表示されます。


    % svcs -l FMRI
    

例 19–1 rlogin サービスの状態を表示する

この例では、多くの契約を含むサービスの状態を表示しています。


% svcs -l network/login:rlogin
fmri         svc:/network/login:rlogin
enabled      true
state        online
next_state   none
restarter    svc:/network/inetd:/default
contract_id  42325 41441 40776 40348 40282 40197 39025 38381 38053\
 33697 28625 24652 23689 15352 9889 7194 6576 6360 5387 1475 3015\
 6545 6612 9302 9662 10484 16254 19850 22512 23394 25876 26113 27326\
 34284 37939 38405 38972 39200 40503 40579 41129 41194


例 19–2 sendmail サービスの状態を表示する

この例では、依存するサービスを持つサービスの状態を表示しています。


% svcs -l network/smtp:sendmail
fmri         svc:/network/smtp:sendmail
enabled      true
state        online
next_state   none
restarter    svc:/system/svc/restarter:default
contract_id  29462 
dependency   require_all/refresh file://localhost/etc/nsswitch.conf (-)
dependency   require_all/refresh file://localhost/etc/mail/sendmail.cf (-)
dependency   optional_all/none svc:/system/system-log (online)
dependency   require_all/refresh svc:/system/identity:domain (online)
dependency   require_all/refresh svc:/milestone/name-services (online)
dependency   require_all/none svc:/network/service (online)
dependency   require_all/none svc:/system/filesystem/local (online)


例 19–3 すべてのサービスの状態を表示する

次のコマンドを実行すると、システムにインストールされているすべてのサービスが一覧表示されます。その際、各サービスの状態も表示されます。このコマンドでは、有効になっているサービスだけでなく、無効になっているサービスも表示されます。


% svcs -a


例 19–4 inetd によって制御されるサービスの状態を表示する

次のコマンドを実行すると、inetd によって制御されるサービスが一覧表示されます。サービスごとに、FMRI のほかに、実行状態と有効になっているかどうかが表示されます。


% inetadm

Procedure特定のサービスに依存するサービスを表示する方法

この手順は、指定されたサービスに依存するサービスインスタンスを確認する方法を示しています。

  1. 特定のサービスに依存するサービスを表示します。


    % svcs -D FMRI
    

例 19–5 マルチユーザーマイルストンに依存するサービスインスタンスを表示する

次の例は、マルチユーザーマイルストンに依存するサービスインスタンスを確認する方法を示しています。


% svcs -D milestone/multi-user
STATE          STIME    FMRI
online         Apr_08   svc:/milestone/multi-user-server:default

Procedure特定のサービスが依存するサービスを表示する方法

この手順は、指定されたサービスインスタンスが依存するサービスを確認する方法を示しています。

  1. 特定のサービスが依存するサービスを表示します。


    % svcs -d FMRI
    

例 19–6 マルチユーザーマイルストンが依存するサービスインスタンスを表示する

次の例では、マルチユーザーマイルストンが依存するサービスインスタンスを表示しています。


% svcs -d milestone/multi-user:default
STATE          STIME    FMRI
disabled       Aug_24   svc:/platform/sun4u/sf880drd:default
online         Aug_24   svc:/milestone/single-user:default
online         Aug_24   svc:/system/utmp:default
online         Aug_24   svc:/system/system-log:default
online         Aug_24   svc:/system/system-log:default
online         Aug_24   svc:/system/rmtmpfiles:default
online         Aug_24   svc:/network/rpc/bind:default
online         Aug_24   svc:/milestone/name-services:default
online         Aug_24   svc:/system/filesystem/local:default
online         Aug_24   svc:/system/mdmonitor:default

SMF サービス (作業マップ)

作業 

説明 

参照先 

サービスインスタンスを無効にします。 

実行中のサービスを停止し、サービスが再び起動しないようにします。 

「サービスインスタンスを無効にする方法」

サービスインスタンスを有効にします。 

特定のサービスを起動します。また、以降のリブート時にサービスが再起動されます。 

「サービスインスタンスを有効にする方法」

特定のサービスを再起動します。 

サービスの停止と起動を 1 つのコマンドで行います。 

「サービスを再起動する方法」

保守状態のサービスを復元します。 

保守状態のサービスをクリーンアップして再起動する方法を示します。 

「保守状態のサービスを復元する方法」

スナップショットに戻します。 

以前のスナップショットを使用して、サービスの問題を修正します。 

「別の SMF スナップショットに戻す方法」

プロファイルを作成します。 

必要に応じてサービスを無効または有効にするために、プロファイルを作成します。 

「SMF プロファイルを作成する方法」

プロファイルを適用します。 

プロファイルの情報を使用して、必要に応じてサービスを無効または有効にします。 

「SMF プロファイルを適用する方法」

netservices コマンドを使用して、サービスとその設定を変更します。

generic_limited.xml プロファイルまたは generic_open.xml プロファイルの情報を使用して、サービスを無効または有効にし、サービスの設定の変更も行います。

「ネットワークに提供するサービスを generic*.xml で変更する」

SMF サービスの管理

この節では、SMF サービスの管理について説明します。

RBAC 権利プロファイルを使って SMF を管理する

RBAC 権利プロファイルを使用して root アクセス権を付与していないユーザーに、一部の SMF サービスの管理を許可することができます。権利プロファイルには、そのユーザーが実行できるコマンドを定義します。SMF のために次のプロファイルが作成されています。

承認については、smf_security(5) のマニュアルページを参照してください。権利プロファイルを割り当てる手順については、『Solaris のシステム管理 (セキュリティサービス)』「ユーザーの RBAC プロパティーを変更する方法」を参照してください。

Procedureサービスインスタンスを無効にする方法

サービスを無効にするには、次の手順に従います。サービスの状態変化はサービス設定リポジトリ内に記録されます。サービスがいったん無効になると、その無効な状態はリブート後も維持されます。サービスを実行中の状態に戻す唯一の方法は、そのサービスを有効にすることです。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 無効にするサービスに依存するサービスの有無を確認します。

    必要とするサービスがこのサービスに依存していた場合、このサービスを無効にできません。


    # svcs -D FMRI
    
  3. サービスを無効にします。


    # svcadm disable FMRI
    

例 19–7 rlogin サービスを無効にする

最初のコマンドの出力結果から、rlogin サービスに依存するサービスは存在しないことがわかります。この例の 2 番目のコマンドは、rlogin サービスを無効にしています。3 番目のコマンドの結果から、rlogin サービスインスタンスの状態が無効になっていることがわかります。


# svcs -D network/login:rlogin
# svcadm disable network/login:rlogin
STATE          STIME    FMRI
# svcs network/login:rlogin
STATE          STIME    FMRI
disabled         11:17:24 svc:/network/login:rlogin

Procedureサービスインスタンスを有効にする方法

サービスを有効にするには、次の手順に従います。サービスの状態変化はサービス設定リポジトリ内に記録されます。サービスがいったん有効になると、そのサービスの依存関係に問題がない限り、その有効な状態はシステムのリブート後も維持されます。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. サービスの依存関係に問題がないか確認します。

    依存するサービスが有効になっている場合、サービスの依存関係に問題はありません。そうでない場合は、svcadm enable -r FMRI を使用して、すべての依存関係を再帰的に有効にします。


    # svcs -l FMRI|grep enabled
    
  3. サービスを有効にします。


    # svcadm enable FMRI
    

例 19–8 rlogin サービスを有効にする

この例の 2 番目のコマンドは、rlogin サービスを有効にしています。3 番目のコマンドの結果から、rlogin サービスインスタンスの状態がオンラインになっていることがわかります。


# svcs -l network/login:rlogin|grep enabled
enabled      false
# svcadm enable network/login:rlogin
# svcs network/login:rlogin
STATE          STIME    FMRI
online         12:09:16 svc:/network/login:rlogin


例 19–9 シングルユーザーモードでサービスを有効にする

次のコマンドは rpcbind を有効にします。-t オプションは、サービスリポジトリを変更しないモードでサービスを一時的に起動します。このリポジトリにシングルユーザーモードで書き込むことはできません。-r オプションは、指定されたサービスのすべての依存関係を再帰的に有効にします。


# svcadm enable -rt rpc/bind

Procedureサービスを再起動する方法

設定が変更されたなどの理由により現在実行中のサービスを再起動する必要が生じた場合、サービスの停止時と起動時に個々のコマンドを入力することなく、サービスの再起動を行えます。サービスの無効化と有効化を別々に行う必要があるのは、サービスの無効化後かつ有効化前に変更を反映する必要がある場合だけです。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 特定のサービスを再起動します。


    # svcadm restart FMRI
    

Procedure保守状態のサービスを復元する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. そのサービスに依存するプロセスのうち、停止していないものが存在しないかどうかを確認します。

    通常、サービスインスタンスが保守状態になっている場合、そのインスタンスに関連付けられたすべてのプロセスが停止しています。しかしながら、処理を進める前にそのことを確認する必要があります。次のコマンドを実行すると、特定のサービスインスタンスに関連付けられたすべてのプロセスが一覧表示されます。その際、各プロセスの PID も表示されます。


    # svcs -p FMRI
    
  3. (省略可能) 残っているプロセスをすべて強制終了します。

    svcs コマンドで表示されたすべてのプロセスに対して、この手順を繰り返します。


    # pkill -9 PID
    
  4. 必要であれば、サービスの設定を修復します。

    /var/svc/log 内の対応するサービスログファイルを開き、エラーが発生していないか確認します。

  5. サービスを復元します。


    # svcadm clear FMRI
    

Procedure別の SMF スナップショットに戻す方法

サービスの設定が間違っている場合、正常に起動した最後のスナップショットに戻すことで問題を解決できます。この手順では、console-login サービスの以前のスナップショットを使用します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. svccfg コマンドを実行します。


    # svccfg
    svc:>
    1. 修正するサービスインスタンスを選択します。


      注 –

      インスタンスを完全に定義した FMRI を使用する必要があります。短縮形は使えません。



      svc:> select system/console-login:default
      svc:/system/console-login:default>
    2. 利用可能なスナップショットの一覧を生成します。


      svc:/system/console-login:default> listsnap
      initial
      running
      start
      svc:/system/console-login:default>
    3. 戻し先として start スナップショットを選択します。

      start スナップショットとは、サービスが正常に起動した最後のスナップショットのことです。


      svc:/system/console-login:default> revert start
      svc:/system/console-login:default>
    4. svccfg を終了します。


      svc:/system/console-login:default> quit
      #
  3. サービス設定リポジトリ内の情報を更新します。

    この手順では、start スナップショットの設定情報に基づいてリポジトリを更新します。


    # svcadm refresh system/console-login
    
  4. サービスインスタンスを再起動します。


    # svcadm restart system/console-login
    

ProcedureSMF プロファイルを作成する方法

プロファイルとは、SMF サービスの一覧とそれぞれを有効にするかどうかを示す XML ファイルのことです。プロファイルは、多くのサービスを一度に有効または無効にするために使用されます。すべてのサービスをプロファイルに含める必要はありません。効果的なプロファイルを作成するには、各プロファイルには有効または無効にする必要のあるサービスだけを含めるようにします。

  1. プロファイルを作成します。

    この例では、svccfg コマンドを使用して、現在のシステムで有効になっているサービスと無効になっているサービスを反映するプロファイルを作成します。代わりに、既存のプロファイルのコピーを作成し、それを編集することもできます。


    # svccfg extract> profile.xml
    

    Oracle Solaris JumpStart を使用する場合、同一のシステムが多数ある場合、またはあとで復元できるようにシステムの設定のアーカイブを作成する場合は、この手順を使用して単一の SMF プロファイルを作成することができます。

  2. profile.xml ファイルを編集して、必要な変更を加えます。

    1. service_bundle 宣言内のプロファイルの名前を変更します。

      この例では、profile という名前に変更しています。


      # cat profile.xml
        ...
      <service_bundle type=`profile` name=`profile`
          xmIns::xi='http://www.w3.org/2003/XInclude'
        ...
    2. このプロファイルで管理すべきでないサービスをすべて削除します。

      各サービスについて、サービスを説明する 3 行を削除します。各サービスの説明は、<service で始まり、</service で終わります。この例は、LDAP クライアントサービスの行を示しています。


      # cat profile.xml
       ...
       <service name='network/ldap/client' version='1' type='service'>
               <instance  name='default' enabled='true'/>
       </service>
    3. このプロファイルで管理すべきサービスをすべて追加します。

      上記の 3 行の構文を使用して各サービスを定義する必要があります。

    4. 必要に応じて、選択したサービスの enabled フラグを変更します。

      この例では、sendmail サービスを無効にしています。


      # cat profile.xml
        ...
        <service  name='network/smtp' version='1' type='service'>
          <instance  name='sendmail' enabled='false'/>
        </service>
        ...
  3. 必要に応じて、この新しいプロファイルを適用します。

    手順については、「SMF プロファイルを適用する方法」を参照してください。

ProcedureSMF プロファイルを適用する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. プロファイルを適用します。

    この例では、profile.xml プロファイルを使用しています。


    # svccfg apply profile.xml
    

    注 –

    generic_limited_net.xml generic_open.xml を切り替えるための具体的な手順、およびこの切り替えを行うときに適用する必要のあるプロパティーについては、「ネットワークに提供するサービスを generic*.xml で変更する」を参照してください。


Procedureネットワークに提供するサービスを generic*.xml で変更する

netservices コマンドを使用すると、ネットワークに最小限のシステムサービスを公開するか、従来の (以前の Solaris リリースと同じ) サービスを公開するかを切り替えることができます。この切り替えは、generic_limited.xml プロファイルと generic_open.xml プロファイルによって行われます。また、このコマンドによって一部のサービスのプロパティーが変更され、それに従ってサービスがローカル専用モードや従来モードに制限されます。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. netservices コマンドを実行します。

    この例では、open、つまり従来のネットワークサービスの公開を選択しています。


    # /usr/sbin/netservices open
    

例 19–10 ネットワークサービスの公開を制限する

このコマンドは、一部のサービスをローカルモードで実行するようにプロパティーを変更し、有効にするサービスを generic_limited_net プロファイルによって制限します。このコマンドは、generic_open.xml プロファイルが適用されている場合のみ使用するようにしてください。


# /usr/sbin/netservices limited

SMF サービスの設定

Procedureサービスを変更する方法

次の手順は、inetd サービスによって管理されていないサービスの設定を変更する方法を示します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 必要に応じて設定ファイルを変更します。

    多くのサービスは、起動方法などの設定情報を定義するための設定ファイルを 1 つ以上持っています。それらのファイルはサービス実行中でも変更可能です。ファイルの内容がチェックされるのはサービス起動時です。

  3. サービスを再起動します。


    # svcadm restart FMRI
    

例 19–11 NFS ファイルシステムを共有する

NFS サービスを使って特定のファイルシステムを共有するには、そのファイルシステムを /etc/dfs/dfstab ファイル内に定義したあと、NFS サービスを再起動する必要があります。この例は、dfstab ファイルの内容とサービスの起動方法を示しています。


# cat /etc/dfs/dfstab
 .
 .
share -F nfs -o rw /export/home
# svcadm restart svc:/network/nfs/server

Procedureサービスの環境変数を変更する方法

この手順は、デバッグに役立つよう cron 環境変数を変更する方法を示します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. サービスが実行されていることを確認します。


    # svcs system/cron
    STATE          STIME    FMRI
    online         Dec_04   svc:/system/cron:default
  3. 環境変数を設定します。

    次の例では、環境変数 UMEM_DEBUG および LD_PRELOAD を設定しています。setenv サブコマンドについては、svccfg(1M) のマニュアルページを参照してください。


    # svccfg -s system/cron:default setenv UMEM_DEBUG default
    # svccfg -s system/cron:default setenv LD_PRELOAD libumem.so
    
  4. サービスの再表示と再起動を行います。


    # svcadm refresh system/cron
    # svcadm restart system/cron
    
  5. 正しく変更されたことを確認します。


    # pargs -e `pgrep -f /usr/sbin/cron`
    100657: /usr/sbin/cron
    envp[0]: LOGNAME=root
    envp[1]: LD_PRELOAD=libumem.so
    envp[2]: PATH=/usr/sbin:/usr/bin
    envp[3]: SMF_FMRI=svc:/system/cron:default
    envp[4]: SMF_METHOD=/lib/svc/method/svc-cron
    envp[5]: SMF_RESTARTER=svc:/system/svc/restarter:default
    envp[6]: TZ=GB
    envp[7]: UMEM_DEBUG=default
    #

Procedureinetd 制御サービスのプロパティーを変更する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 特定のサービスのプロパティーを一覧表示します。

    このコマンドを実行すると、FMRI で指定されたサービスのすべてのプロパティーが表示されます。


    # inetadm -l FMRI
    
  3. サービスのプロパティーを変更します。

    inetd 制御サービスの各プロパティーは、プロパティー名とその値によって定義されます。値を指定せずにプロパティー名を指定した場合、そのプロパティーはデフォルト値にリセットされます。特定のサービスのプロパティーの詳細については、そのサービスのマニュアルページを参照してください。


    # inetadm -m FMRI property-name=value
    
  4. プロパティーが変更されたことを確認します。

    プロパティーを再度一覧表示し、適切に変更されていることを確認します。


    # inetadm -l FMRI
    
  5. 変更が適用されていることを確認します。

    プロパティーに対する変更が期待どおりに適用されていることを確認します。


例 19–12 telnettcp_trace プロパティーを変更する

次の例は、telnettcp_trace プロパティーを true に設定する方法を示しています。telnet コマンドの実行後の syslog 出力の結果から、変更が適用されていることがわかります。


# inetadm -l svc:/network/telnet:default
SCOPE    NAME=VALUE
         name="telnet"
 .
 .
default  inherit_env=TRUE
default  tcp_trace=FALSE
default  tcp_wrappers=FALSE
# inetadm -m svc:/network/telnet:default tcp_trace=TRUE
# inetadm -l svc:/network/telnet:default
SCOPE    NAME=VALUE
         name="telnet"
 .
 .
default  inherit_env=TRUE
         tcp_trace=TRUE
default  tcp_wrappers=FALSE
# telnet localhost
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
login: root
Password: 
Last login: Mon Jun 21 05:55:45 on console
Sun Microsystems Inc.   SunOS 5.10      s10_57  May 2004
# ^D
Connection to localhost closed by foreign host.
# tail -1 /var/adm/messages
Jun 21 06:04:57 yellow-19 inetd[100308]: [ID 317013 daemon.notice] telnet[100625]
    from 127.0.0.1 32802

Procedureinetd 制御サービスのコマンド行引数を変更する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 特定のサービスの exec プロパティーを表示します。

    このコマンドを実行すると、FMRI で指定されたサービスのすべてのプロパティーが表示されます。grep コマンドを追加することで、サービスの exec プロパティーに出力を制限しています。


    # inetadm -l FMRI|grep exec
    
  3. サービスの exec プロパティーを変更します。

    exec プロパティーに設定される command-syntax は、サービス起動時に実行されるコマンド文字列を定義します。


    # inetadm -m FMRI exec="command-syntax
    "
    
  4. プロパティーが変更されたことを確認します。

    プロパティーを再度一覧表示し、適切に変更されていることを確認します。


    # inetadm -l FMRI
    

例 19–13 ftp コマンドに接続ロギング (-l) オプションを追加する

この例では、ftp デーモンの起動オプションに -l オプションを追加しています。この変更が適用されたことを確かめるには、ftp ログインセッション完了後に syslog 出力を調べます。


# inetadm -l svc:/network/ftp:default | grep exec
        exec="/usr/sbin/in.ftpd -a"
# inetadm -m svc:/network/ftp:default exec="/usr/sbin/in.ftpd -a -l"
# inetadm -l svc:/network/ftp:default
SCOPE    NAME=VALUE
         name="ftp"
         endpoint_type="stream"
         proto="tcp6"
         isrpc=FALSE
         wait=FALSE
         exec="/usr/sbin/in.ftpd -a -l"
 .
 .
# ftp localhost
Connected to localhost.
220 yellow-19 FTP server ready.
Name (localhost:root): mylogin
331 Password required for mylogin.
Password:
230 User mylogin logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 236 bytes in 0 transfers.
221-Thank you for using the FTP service on yellow-19.
221 Goodbye.
# tail -2 /var/adm/messages
Jun 21 06:54:33 yellow-19 ftpd[100773]: [ID 124999 daemon.info] FTP LOGIN FROM localhost 
     [127.0.0.1], mylogin
Jun 21 06:54:38 yellow-19 ftpd[100773]: [ID 528697 daemon.info] FTP session closed

Procedureinetd.conf エントリを変換する方法

次の手順では、inetd.conf エントリを SMF サービス目録に変換します。inetd に依存する Sun 以外のアプリケーションをシステムに追加するたびに、この手順を実行する必要があります。また、/etc/inetd.conf 内のエントリに設定変更を行う必要がある場合にも、この手順を実行してください。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. inetd.conf エントリを変換します。

    inetconv コマンドは、選択されたファイル内の各エントリをサービス目録に変換します。


    # inetconv -i filename
    

例 19–14 /etc/inet/inetd.conf エントリを SMF サービス目録に変換する


# inetconv -i /etc/inet/inetd.conf

実行制御スクリプトの使用 (作業マップ)

作業 

説明 

参照先 

サービスを起動または停止します。 

実行制御スクリプトを使用してサービスを起動または停止します。 

「実行制御スクリプトを使用して従来のサービスを起動または停止する方法」

実行制御スクリプトを追加します。 

実行制御スクリプトを作成し、それを /etc/init.d ディレクトリに追加します。

「実行制御スクリプトを追加する方法」

実行制御スクリプトを無効にします。 

ファイル名を変更することで実行制御スクリプトを無効にします。 

「実行制御スクリプトを無効にする方法」

実行制御スクリプトの使用

Procedure実行制御スクリプトを使用して従来のサービスを起動または停止する方法

実行レベルごとに対応するスクリプトを持つことの利点は、/etc/init.d ディレクトリ内の個々のスクリプトを実行することによって、システムの実行レベルを変更しないで (現在の実行レベルの) システムサービスを停止できる点です。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. システムサービスを停止します。


    # /etc/init.d/filename 
    stop
    
  3. システムサービスを再開します。


    # /etc/init.d/filename 
    start
    
  4. サービスが停止または起動されたことを確認します。


    # pgrep -f service
    

例 19–15 実行制御スクリプトを使用してサービスを起動または停止する

NFS サーバーデーモンを停止するには、次のように入力します。


# /etc/init.d/nfs.server stop
# pgrep -f nfs

そして、NFS サーバーデーモンを再開するには、次のように入力します。


# /etc/init.d/nfs.server start
# pgrep -f nfs
101773
101750
102053
101748
101793
102114
# pgrep -f nfs -d, | xargs ps -fp
     UID    PID   PPID   C    STIME TTY         TIME CMD
  daemon 101748      1   0   Sep 01 ?           0:06 /usr/lib/nfs/nfsmapid
  daemon 101750      1   0   Sep 01 ?          26:27 /usr/lib/nfs/lockd
  daemon 101773      1   0   Sep 01 ?           5:27 /usr/lib/nfs/statd
    root 101793      1   0   Sep 01 ?          19:42 /usr/lib/nfs/mountd
  daemon 102053      1   0   Sep 01 ?        2270:37 /usr/lib/nfs/nfsd
  daemon 102114      1   0   Sep 01 ?           0:35 /usr/lib/nfs/nfs4cbd

Procedure実行制御スクリプトを追加する方法

サービスを起動または停止するための実行制御スクリプトを追加するには、そのスクリプトを/etc/init.d ディレクトリにコピーします。次に、サービスを起動または停止する rcn.d ディレクトリ内にリンクを作成します。

実行制御スクリプトの命名法の詳細については、/etc/rcn.d ディレクトリ内の README ファイルを参照してください。次に、実行制御スクリプトを追加する方法について説明します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. スクリプトを /etc/init.d ディレクトリに追加します。


    # cp filename/etc/init.d
    # chmod 0744 /etc/init.d/filename
    # chown root:sys /etc/init.d/filename
    
  3. 適切な rcn.d ディレクトリへのリンクを作成します。


    # cd /etc/init.d
    # ln filename /etc/rc2.d/Snnfilename
    # ln filename /etc/rcn.d/Knnfilename
    
  4. スクリプトのリンクが指定のディレクトリ内にあることを確認します。


    # ls /etc/init.d/*filename /etc/rc2.d/*filename /etc/rcn.d/*filename
    

例 19–16 実行制御スクリプトを追加する

次の例は、xyz サービスの実行制御スクリプトを追加する方法を示しています。


# cp xyz /etc/init.d
# chmod 0744 /etc/init.d/xyz
# chown root:sys /etc/init.d/xyz
# cd /etc/init.d
# ln xyz /etc/rc2.d/S99xyz
# ln xyz /etc/rc0.d/K99xyz
# ls /etc/init.d/*xyz /etc/rc2.d/*xyz /etc/rc0.d/*xyz

Procedure実行制御スクリプトを無効にする方法

実行制御スクリプトを無効にするには、ファイル名の先頭に下線 (_) を付けてファイル名を変更します。下線またはドット (.) で始まるファイルは実行されません。接尾辞を追加してファイルをコピーすると、両方のファイルが実行されます。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 新しいファイルの先頭に下線 (_) を付けて、スクリプト名を変更します。


    # cd /etc/rcn.d
    # mv filename_filename
    
  3. スクリプトの名前が変更されたことを確認します。


    # ls _*
    _filename
    

例 19–17 実行制御スクリプトを無効にする

次の例は、S99datainit スクリプトの名前を変更する方法を示しています。


# cd /etc/rc2.d
# mv S99datainit _S99datainit
# ls _*
_S99datainit

サービス管理機能のトラブルシューティング

Procedure起動していないサービスをデバッグする

この手順では、印刷サービスが無効になっています。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. ハングしたサービスに関する情報を要求します。


    # svcs -xv
    svc:/application/print/server:default (LP Print Service)
     State: disabled since Wed 13 Oct 2004 02:20:37 PM PDT
    Reason: Disabled by an administrator.
       See: http://sun.com/msg/SMF-8000-05
       See: man -M /usr/share/man -s 1M lpsched
    Impact: 2 services are not running:
            svc:/application/print/rfc1179:default
            svc:/application/print/ipp-listener:default

    -x オプションを指定すると、影響を受けたサービスインスタンスに関する情報も表示されます。

  3. サービスを有効にします。


    # svcadm enable application/print/server
    

Procedure破壊されたリポジトリを修復する方法

この手順は、破壊されたリポジトリをデフォルトのリポジトリと交換する方法を示しています。リポジトリデーモン svc.configd が起動すると、設定リポジトリの整合性チェックが行われます。このリポジトリは、/etc/svc/repository.db に格納されています。このリポジトリは、次のいずれかが原因で破壊されることがあります。

整合性チェックに失敗すると、svc.configd デーモンは次のようなメッセージをコンソールに書き出します。


svc.configd: smf(5) database integrity check of:

    /etc/svc/repository.db

  failed.  The database might be damaged or a media error might have
  prevented it from being verified.  Additional information useful to
  your service provider is in:

    /etc/svc/volatile/db_errors

  The system will not be able to boot until you have restored a working
  database.  svc.startd(1M) will provide a sulogin(1M) prompt for recovery
  purposes.  The command:

    /lib/svc/bin/restore_repository

  can be run to restore a backup version of your repository. See
  http://sun.com/msg/SMF-8000-MY for more information.

その後 svc.startd デーモンが終了し、sulogin が起動して保守作業を行えるようになります。

  1. sulogin プロンプトで root パスワードを入力します。sulogin では、root ユーザーはシステム保守モードに入ってシステムを修復できます。

  2. 次のコマンドを実行します。


    # /lib/svc/bin/restore_repository
    

    このコマンドを実行すると、破壊されていないバックアップの復元に必要な手順が示されます。SMF では、システムの重要な局面でリポジトリのバックアップが自動的に作成されます。詳細は、「SMF リポジトリのバックアップ」を参照してください。

    /lib/svc/bin/restore_repository コマンドが起動すると、次のようなメッセージが表示されます。


    Repository Restore utility
    See http://sun.com/msg/SMF-8000-MY for more information on the use of
    this script to restore backup copies of the smf(5) repository.
    
    If there are any problems which need human intervention, this script
    will give instructions and then exit back to your shell.
    
    Note that upon full completion of this script, the system will be
    rebooted using reboot(1M), which will interrupt any active services.

    復元するシステムがローカルゾーンでない場合は、読み取り権と書き込み権を付けて / ファイルシステムおよび /usr ファイルシステムをマウントし直しデータベースを復元する方法が表示されます。これらの説明を表示したあと、スクリプトは終了します。エラーの発生に特に注意しながら、これらの説明に従います。

    書き込み権を付けてルート (/) ファイルシステムをマウントしたあと、またはシステムがローカルゾーンである場合は、復元するリポジトリのバックアップを選択するよう求められます。


    The following backups of /etc/svc/repository.db exists, from
    oldest to newest:
    
    ... list of backups ...

    バックアップには、バックアップのタイプとバックアップが作成された時間に基づいて名前が付けられています。boot で始まっているのは、システムのブート後、リポジトリに対して最初の変更が行われる前に作成されたバックアップです。manifest_import で始まっているのは、svc:/system/manifest-import:default のプロセス終了後に作成されたバックアップです。バックアップ時間は、YYYYMMDD_HHMMSS 形式で記録されます。

  3. 適切な応答を入力します。

    通常は、最新のバックアップオプションを選択します。

    Please enter one of:
            1) boot, for the most recent post-boot backup
            2) manifest_import, for the most recent manifest_import backup.
            3) a specific backup repository from the above list
            4) -seed-, the initial starting repository. (All customizations
               will be lost.)
            5) -quit-, to cancel.
    
    Enter response [boot]:

    復元するバックアップを指定しないで Enter キーを押した場合は、[] で囲まれたデフォルトの応答が選択されます。-quit- を選択すると、restore_repository スクリプトが終了して、シェルスクリプトに戻ります。


    注 –

    -seed- を選択すると、seed リポジトリが復元されます。このリポジトリは、初期インストールとアップグレード時に使用する目的で作成されたものです。seed リポジトリを回復の目的で使用するのは、最後の手段にしてください。


    復元するバックアップを選択すると、妥当性検査が行われ、その整合性がチェックされます。なんらかの問題があると、restore_repository コマンドによってエラーメッセージが表示され、別のバックアップを選択するよう促されます。有効なバックアップを選択すると、次の情報が表示され、最終確認を入力するよう促されます。

    After confirmation, the following steps will be taken:
    
    svc.startd(1M) and svc.configd(1M) will be quiesced, if running.
    /etc/svc/repository.db
        -- renamed --> /etc/svc/repository.db_old_YYYYMMDD_HHMMSS
    /etc/svc/volatile/db_errors
        -- copied --> /etc/svc/repository.db_old_YYYYMMDD_HHMMSS_errors
    repository_to_restore
        -- copied --> /etc/svc/repository.db
    and the system will be rebooted with reboot(1M).
    
    Proceed [yes/no]?
  4. yes と入力して障害を修復します。

    restore_repository コマンドが表示されたアクションをすべて実行すると、システムがリブートします。

Procedureどのサービスも起動しないでブートする方法

サービスの起動に関する問題が発生した場合、ブート時にシステムがハングアップする可能性があります。この手順は、そうした問題のトラブルシューティングを行う方法を示しています。

  1. どのサービスも起動しないでブートします。

    このコマンドを実行すると、svc.startd デーモンはすべてのサービスを一時的に無効にし、コンソール上で sulogin を起動します。


    ok boot -m milestone=none
    
  2. システムに root としてログインします。

  3. すべてのサービスを有効にします。


    # svcadm milestone all
    
  4. ブートプロセスがどこでハングアップするのかを確認します。

    ブートプロセスがハングアップしたら、動作していないサービスを確認するために、svcs -a を実行します。/var/svc/log のログファイル内でエラーメッセージの有無を確認します。

  5. 問題が解決したら、すべてのサービスが起動していることを確認します。

    1. 必要なサービスがすべてオンラインになっていることを確認します。


      # svcs -x
      
    2. console-login サービスの依存関係に問題がないことを確認します。

      このコマンドを使えば、コンソール上の login プロセスが実行されるかどうかを確認できます。


      # svcs -l system/console-login:default
      
  6. 通常のブートプロセスを継続します。

Procedureブート中に system/filesystem/local:default サービスで障害が発生した場合に sulogin プロンプトを強制的に表示する方法

Solaris OS のブートに必要でないローカルファイルシステムは、svc:/system/filesystem/local:default サービスによってマウントされます。これらのファイルシステムのいずれかがマウントできない場合、このサービスは保守状態になります。システムの起動は続行され、filesystem/local に依存しないサービスは起動されます。依存関係を介して起動されるサービスで、オンラインになるために filesystem/local を必要とするものは、起動されません。

サービスで障害が発生した場合に、システムの起動の続行を許可する代わりに、ただちに sulogin プロンプトを表示するようシステムの設定を変更するには、次の手順に従ってください。

  1. system/console-login サービスを変更します。


    # svccfg -s svc:/system/console-login
    svc:/system/console-login> addpg site,filesystem-local dependency
    svc:/system/console-login> setprop site,filesystem-local/entities = fmri: svc:/system/filesystem/local
    
    svc:/system/console-login> setprop site,filesystem-local/grouping = astring: require_all
    
    svc:/system/console-login> setprop site,filesystem-local/restart_on = astring: none
    
    svc:/system/console-login> setprop site,filesystem-local/type = astring: service
    
    svc:/system/console-login> end
    
  2. サービスを再表示します。


    # svcadm refresh console-login
    

例 19–18 Oracle Solaris JumpStart を使用して sulogin プロンプトを強制的に表示する

次に示すコマンドをスクリプトに保存し、/etc/rcS.d/S01site-customfs として保存します。


#!/bin/sh
#
# This script adds a dependency from console-login -> filesystem/local
# This forces the system to stop the boot process and drop to an sulogin prompt
# if any file system in filesystem/local fails to mount.

PATH=/usr/sbin:/usr/bin
export PATH

	svccfg -s svc:/system/console-login << EOF
addpg site,filesystem-local dependency
setprop site,filesystem-local/entities = fmri: svc:/system/filesystem/local
setprop site,filesystem-local/grouping = astring: require_all
setprop site,filesystem-local/restart_on = astring: none
setprop site,filesystem-local/type = astring: service
EOF

svcadm refresh svc:/system/console-login

[ -f /etc/rcS.d/S01site-customfs ] &&
    rm -f /etc/rcS.d/S01site-customfs

注意事項

system/filesystem/local:default サービスで障害が発生したときは、svcs -vx コマンドを使用して障害を特定するようにしてください。障害が修正されたら、次のコマンドでエラー状態をクリアし、システムのブートを続行できるようにします。 svcadm clear filesystem/local