機械制御/振動騒音
IR情報 会社情報

PERFORCEテクニカルノート045

image_toyo_ss_img_perforce_title_perforce.gif.gif
テクニカルノート045  
image_toyo_ss_img_all_line_yellow.gif.gif
image_toyo_common_spacer.gif.gif
UNIX 環境において inetd から PERFORCEサーバを実行する
image_toyo_common_spacer.gif.gif
タスク
image_toyo_common_spacer.gif.gif
UNIX 環境において inetd から PERFORCEサーバを実行します
image_toyo_common_spacer.gif.gif
解決策
image_toyo_common_spacer.gif.gif
inetd とは?
image_toyo_common_spacer.gif.gif
inetd は起動スクリプトから実行する以外の p4d の起動方法であり、特殊なサービスを提供する際にも役立つことがあります。例えば、Perforce Software社には UNIX 環境で稼動するテストサーバがいくつかあり、それぞれが inetd サービスとして独自のポート番号で定義されています。
image_toyo_common_spacer.gif.gif
inetd を使用して p4d を起動する際には、注意点があります。
image_toyo_common_spacer.gif.gif
  • inetd は過剰な接続を拒否する場合があり、数千行の p4 コマンドを記述したスクリプトを実行すると、膨大な数の p4d が立ち上がることになり、inetd サービスが一時的に使用できなくなることがあります。
  • p4d は要求がある度に起動されるため、サーバをシャットダウンすることは簡単ではありません。サーバを停止するには、/etc/inetd.conf を変更して、inetd を再起動する必要があります。(p4 admin stop は何も表示することなく失敗します。)
image_toyo_common_spacer.gif.gif
inetd から起動する
image_toyo_common_spacer.gif.gif
次の行を /etc/inetd.conf に追加します。
image_toyo_common_spacer.gif.gif
	perforce stream tcp nowait username path/to/p4d p4d -i -r p4droot
image_toyo_common_spacer.gif.gif
そして、次の行を /etc/services に追加します。
image_toyo_common_spacer.gif.gif
	perforce nnnn/tcp
image_toyo_common_spacer.gif.gif
ただし、nnnn はこの PERFORCEサーバに割り当てるポート番号です。
image_toyo_common_spacer.gif.gif
上記の /etc/inetd.conf の行には、追加の "p4d" が必要であることに注意してください。inetd は argv[0] としてこれを渡します。それにより、最初の引数は -i オプションとなり、p4d はサーバとして起動される代わりに、標準入出力においてサーバに接続された単一のクライアントとして機能します。これは、inetd によって起動されるサービスでの慣例です。
image_toyo_common_spacer.gif.gif
xinetd から起動する
image_toyo_common_spacer.gif.gif
以下の行を /etc/services に追加します。
image_toyo_common_spacer.gif.gif
	perforce nnnn/tcp
image_toyo_common_spacer.gif.gif
ただし、 nnnn は xinetd が接続待ちのために使用するポート番号です。
image_toyo_common_spacer.gif.gif
次に、以下の内容を含む /etc/xinetd.d/perforce という新しいファイルを作成します。
image_toyo_common_spacer.gif.gif
	service perforce    
	{
		socket_type = stream
		wait        = no
		user        = user
		group       = group
		server      = path/to/executable
		server_args = arguments
		disable     = no
	}
image_toyo_common_spacer.gif.gif
最近の PERFORCEサーバの制限モード
image_toyo_common_spacer.gif.gif
p4d を inetd または xinetd から起動している場合、"p4 info" の出力結果に"restricted mode "に関する記述が表示されます。これは、所有しているライセンスのユーザ数にかかわらず、2人までしかユーザを作成できないことを意味します。新しいユーザを作成するには、サーバ・ルートに対して、一時的に標準デーモン・モードでサーバを起動する必要があります。
image_toyo_common_spacer.gif.gif
通常、PERFORCE サーバ p4d は、UNIX 環境でバックグラウンド・プロセスとして起動し、クライアントからの接続を待機します。しかし、inetd または xinetd および p4d -i を使用して p4d を起動させることができるのは、p4d への接続が確立したときです。
image_toyo_common_spacer.gif.gif
注意
image_toyo_common_spacer.gif.gif
/etc/inetd.conf 内の変更を有効するには、inetd を再起動しなければなりません。これを行うには、最初に ps コマンドと grep コマンドで inetd のプロセス ID (PID) を特定した後、適切な kill コマンドを使用するか、または一般的な pkill コマンドか pgrep コマンドを使用します。それらのコマンドが利用可能であるかを知るには、man pgrep を実行します。
image_toyo_common_spacer.gif.gif
	ps -auxww | grep inetd
	kill -HUP pid
image_toyo_common_spacer.gif.gif
または、単に次のコマンドを実行します。
image_toyo_common_spacer.gif.gif
	pkill -HUP inetd
image_toyo_common_spacer.gif.gif
ps の構文は、UNIX の種類によって異なることに注意してください。詳しくは、man ps のページを参照してください。
image_toyo_common_spacer.gif.gif
inetd 、とりわけ xinetd によって生成されたサーバは、標準入出力チャネルを使用してクライアントとの通信を行うため、トリガがその出力を標準エラー出力に送ることによって、クライアントとの接続が切断される場合があります。ご注意ください。

image_toyo_common_spacer.gif.gif
image_toyo_ss_img_all_btn_yellow_bgwhite2.gif.gif戻る

PAGE TOP