FAQ

今日も「社内」のどこかで東陽テクニカ2

PERFORCE

ID.045

Q. UNIX 環境において inetd から PERFORCEサーバを実行する


タスク

UNIX 環境において inetd から PERFORCEサーバを実行します

A.


解決策

inetd とは?

inetd は起動スクリプトから実行する以外の p4d の起動方法であり、特殊なサービスを提供する際にも役立つことがあります。例えば、Perforce Software社には UNIX 環境で稼動するテストサーバがいくつかあり、それぞれが inetd サービスとして独自のポート番号で定義されています。

inetd を使用して p4d を起動する際には、注意点があります。
  • inetd は過剰な接続を拒否する場合があり、数千行の p4 コマンドを記述したスクリプトを実行すると、膨大な数の p4d が立ち上がることになり、inetd サービスが一時的に使用できなくなることがあります。
  • p4d は要求がある度に起動されるため、サーバをシャットダウンすることは簡単ではありません。サーバを停止するには、/etc/inetd.conf を変更して、inetd を再起動する必要があります。(p4 admin stop は何も表示することなく失敗します。)

inetd から起動する

次の行を /etc/inetd.conf に追加します。
perforce stream tcp nowait username path/to/p4d p4d -i -r p4droot
そして、次の行を /etc/services に追加します。
perforce nnnn/tcp
ただし、nnnn はこの PERFORCEサーバに割り当てるポート番号です。

上記の /etc/inetd.conf の行には、追加の "p4d" が必要であることに注意してください。inetd は argv[0] としてこれを渡します。それにより、最初の引数は -i オプションとなり、p4d はサーバとして起動される代わりに、標準入出力においてサーバに接続された単一のクライアントとして機能します。これは、inetd によって起動されるサービスでの慣例です。

xinetd から起動する

以下の行を /etc/services に追加します。
perforce nnnn/tcp
ただし、 nnnn は xinetd が接続待ちのために使用するポート番号です。

次に、以下の内容を含む /etc/xinetd.d/perforce という新しいファイルを作成します。
service perforce { socket_type = stream wait = no user = user group = group server = path/to/executable server_args = arguments disable = no }
最近の PERFORCEサーバの制限モード

p4d を inetd または xinetd から起動している場合、"p4 info" の出力結果に"restricted mode "に関する記述が表示されます。これは、所有しているライセンスのユーザ数にかかわらず、2人までしかユーザを作成できないことを意味します。新しいユーザを作成するには、サーバ・ルートに対して、一時的に標準デーモン・モードでサーバを起動する必要があります。

通常、PERFORCE サーバ p4d は、UNIX 環境でバックグラウンド・プロセスとして起動し、クライアントからの接続を待機します。しかし、inetd または xinetd および p4d -i を使用して p4d を起動させることができるのは、p4d への接続が確立したときです。

注意

/etc/inetd.conf 内の変更を有効するには、inetd を再起動しなければなりません。これを行うには、最初に ps コマンドと grep コマンドで inetd のプロセス ID (PID) を特定した後、適切な kill コマンドを使用するか、または一般的な pkill コマンドか pgrep コマンドを使用します。それらのコマンドが利用可能であるかを知るには、man pgrep を実行します。

ps -auxww | grep inetd kill -HUP pid
または、単に次のコマンドを実行します。
pkill -HUP inetd
ps の構文は、UNIX の種類によって異なることに注意してください。詳しくは、man ps のページを参照してください。

inetd 、とりわけ xinetd によって生成されたサーバは、標準入出力チャネルを使用してクライアントとの通信を行うため、トリガがその出力を標準エラー出力に送ることによって、クライアントとの接続が切断される場合があります。ご注意ください。

<< PERFORCEに関するFAQ一覧へ戻る