Java

    rmid を起動する inetd の構成

ドキュメントの目次

Solaris オペレーティングシステム (Solaris OS) では、インターネットサービスデーモンの inetd が、システムブート時にサービスを起動する代替手段になります。インターネットの標準サービスに対するサーバプロセスであるこのデーモンを、必要に応じてサービスを起動するように構成することができます。インターネットサービスデーモンの詳細については、Solaris OS の inetd(1M) のマニュアルページを参照してください。

J2SE(TM) 5.0 リリースでは、inetd を構成して、必要に応じて Java RMI 起動デーモンの rmid を起動することができます。この場合、rmid をブート時に起動することも、手動で起動することも必要ありません。その代わり、クライアントがオブジェクトを起動するために接続しようとすると、rmid が起動されます。

注: 再起動可能なサービスが rmid に登録されている場合、rmid は、inetd によってではなく、システム起動時に起動されるようにすべきです。そのようにすると、再起動可能なサービスがシステム稼動中、常に実行されている状態になります。

rmid を起動するように inetd を構成するには、inetd が使用する /etc/inetd.conf および /etc/services の 2 つの構成ファイルのそれぞれにエントリを追加する必要があります。これらのファイルを編集するには、rmid が実行されるマシンへのルートアクセス権が必要です。

inetd を再構成したあとで、正しく機能するかどうかを確認するためにテストする必要があります。

このチュートリアルでは、次の手順を実行します。


/etc/inetd.conf を構成する

/etc/inetd.conf 構成ファイルには、inetd がソケット経由で要求を受け取ったときに起動されるサービス用のエントリが含まれています。この構成ファイルの形式についての詳細は、Solaris OS の inetd.conf(4) のマニュアルページを参照してください。

rmid を起動するように inetd を構成するには、次のエントリを /etc/inetd.conf 構成ファイルに追加します (マシンへのルートアクセス権が必要)。

rmid stream tcp wait nobody jreHome/bin/rmid  \
rmid -log logDir/rmid.log rmidOptions
jreHome はインストール済み JRE へのパス、logDir はログファイルのディレクトリ、rmidOptions はその他の rmid 用のオプション (プロパティの初期化など) です。rmidinetd によって起動される場合は、-log オプションを指定する必要があります。また、ポートは /etc/services 構成ファイルから取得されるので、-port オプションは指定しないでください。

nobody 以外のユーザとして rmid を実行する必要がある場合は、nobodyrmid を実行する必要のあるユーザ ID に置き換えてください。

/etc/services を構成する

次に、rmid/etc/services 構成ファイルにサービスとして指定する必要があります。この構成ファイルの形式についての詳細は、Solaris OS の services(4) のマニュアルページを参照してください。

サービスとして rmid を指定するには、次のエントリを /etc/services 構成ファイルに追加します (マシンへのルートアクセス権が必要)。

rmid        port/tcp
portActivationSystem および rmid がエクスポートする Activator リモートオブジェクトのためのポート番号です。このポート番号は通常 1098 ですが、クライアントと起動可能なサービスがシステムプロパティ java.rmi.activation.port を別のポートに定義している場合は、別のポート番号を使うことができます。

inetd に新しい構成を読ませる

ここまでで構成ファイルが変更されたので、inetd は新しい構成を読む必要があります。その結果、構成されたサービスに対応する適切なポートで要求を待機できるようになります。

ただし最初に、rmid がまだ実行されていないことを確認する必要があります。これを行うには、次のコマンドを実行します。

% ps -ef | grep rmid
上記コマンドにより実行中の rmid プロセスについての情報が表示されない場合は、rmid が実行されていないことになります。情報が表示された場合は、作業を続行する前に、まず rmid をシャットダウンする必要があります。

次に、inetd が新しい構成を読む必要があります。inetd に構成を読ませるには、実行中の inetd プロセスにハングアップの信号を送信する必要があります。まず、次のコマンドを実行して、実行中の inetd プロセスのプロセス ID を調べます。

% ps -ef | grep inetd
このコマンドによって、次のように表示されます。
root   171     1  0   Sep 30 ?0:02 /usr/sbin/inetd -s
この例の inetd のプロセス ID は、171 です。これで、次のコマンドにプロセス ID を指定して実行すると (ルートアクセス権が必要)、inetd プロセスにハングアップ信号を送信することができます。
% kill -HUP 171

これで、プログラムが上記のように構成されたポートに接続しようとしたときに rmid を起動するための設定が、inetd に対してすべて行われます。

作成した構成をテストする

inetd が正しく構成されたことをテストするために、ActivationSystem を検索する単純なプログラムを実行することができます。構成が正しい場合は、inetd によって rmid が起動されます。

以下は、java.rmi.activation.port システムプロパティの値として供給されたポート上で ActivationSystem を検索する単純なプログラムです。

package example.inetd;

import java.rmi.activation.ActivationSystem;
import java.rmi.activation.ActivationGroup;

public class GetActivationSystem {

public static void main(String[] args) throws Exception {

	ActivationSystem system = ActivationGroup.getSystem();
	System.err.println("ActivationSystem = " + system);
    }
}

次のようにして、このプログラムをコンパイルし、実行します。

% javac -d classDir GetActivationSystem.java
% java -classpath classDir -Djava.rmi.activation.port=port example.inetd.GetActivationSystem
classDir は、この例のクラスのためのクラスパスです。port は、/etc/services ファイル内で rmid 用に構成された ActivationSystem のためのポートです。

プログラムが ActivationSystem を正常に表示した場合は、inetd によって rmid が起動されたことになります。

プログラムがハングアップするか例外のトレースを出力した場合は、rmid によって作成された出力をチェックしてください。rmidinetd によって起動されると、System.err へのすべての出力は、java.io.tmpdir プロパティで指定されたディレクトリ内のファイルに書き出されます。通常、Solaris OS では、このディレクトリは /var/tmp です。この出力ファイルの接頭辞は「rmid-err」、接尾辞は「.tmp」です。このファイル名には、ファイル名を一意にするための文字 (通常は数字) も含めます。

rmidinetd から正しく起動された場合、出力ファイルには次のようなテキストが含まれ、警告またはエラーメッセージは含まれません。

Tue Sep 30 13:07:38 EDT 2003
rmid startup with inherited channel:sun.nio.ch.ServerSocketChannelImpl[/129.148.70.120:1098]
ファイルが存在しないか、上記テキストがファイル内にないか、または追加のエラー出力がファイル内にある場合は、構成を再チェックしてください。inetd 構成の変更を終えたときには、inetd にハングアップ信号を送信して変更済みの構成が読み込まれるようにしてください。また、その前に起動されたすべての rmid プロセスを終了させることも忘れないでください。


Copyright © 2003 Sun Microsystems, Inc.All Rights Reserved.
コメントの送付先: rmi-comments@java.sun.com
Sun