サーバー ポートでリクエストを受け入れ、ユーザー入力を処理し、同じポートから出力を提供して終了するスクリプトを用意しました。スクリプトは常に実行されているわけではなく、クライアントによって特定のポートが開かれたときに開始されます。私の Linux マシンでの (動作中の) 構成は次のとおりです。
/etc/services
test_socket 9876/tcp # TestSocket
/etc/xinetd.d/test_socket
# default: on
# description: blah blah blah
service test_socket
{
port = 9876
socket_type = stream
protocol = tcp
wait = no
user = root
server = /export/home/stefano/do_something.php
instances = 20
}
クライアントがポート :9876 を開くと、「do_something.php」スクリプトが受信メッセージの受信を開始し、それを処理して結果を出力してから終了し、通信を閉じます。
上記のアーキテクチャを Solaris 10 マシンに移行/複製したいと考えています。
この目的のために、同じサービス ファイルに同じ値を構成しました。
/etc/services
test_socket 9876/tcp # TestSocket
しかし、Solaris10 では inetd.d が廃止され、svc に置き換えられたので、同じ動作を再現するマニフェストを作成するにはどうすればよいでしょうか?
ドキュメントを検索してみましたが、クライアントがサーバー ポート経由で通信するように要求したときにオンデマンドで開始するものは見つかりませんでした。
誰か助けてくれませんか?
答え1
まず、inetd.conf
設定に合わせてスタイル ファイルを作成する必要があります。これは次のように非常に簡単です。
test_socket stream tcp nowait root /export/.../do_something.php do_something.php
次に、そのコマンドを実行して、そのサービスの説明を にインポートしますsmf
。
inetconv -i inetd.conf-style-file
最初にインポートせずに作成されるものを確認したい場合は、次のコマンドを実行します。
inetconv -n -i inetd.conf-style-file -o /tmp
にインポートしたらsmf
、サービスの管理はinetadm
コマンド、例:
inetadm -e svc:/network/test_socket/tcp:default # enable the service
inetadm -d svc:/network/test_socket/tcp:default # disable the service
inetadm -l svc:/network/test_socket/tcp:default # list the service properties