inetd サービスは、データを取り込み、ユーザーとある程度やり取りする必要がある 1 回限りのアプリに最適です。IT は、(x)inetd から std{in,out,err} へのデータ ビバ ソケットをパイプすることにより、tcp/udp で動作します。また、inetd アプリは tcpwrappers とうまく連携して、システム ポリシー ファイルと ACL によってセキュリティを強化します。
そうです、実際にはコンソールアプリであるため、コンソールアプリのようにアプリを作成します。inetd は、ネットワークからアプリの入力への透過的なリバース プロキシと考えてください。
アドバイスとして、プロセス シグナルを正しく処理するコードを記述し、システム上の別のプロセスと対話する必要がある場合は、そのために unix ソケット/fifo を使用します。
また、大量のデータを一度にストリーミングしたり、多数の接続を必要とするアプリを作成しようとしないでください。inetd がボトルネックになると、スケーラビリティが問題になります。これが、Apache と Sendmail が inetd のサポートを中止し、代わりにモノラル アプリとして使用される理由です。HTTP はこの役割に適しており、nginx を使用した fastcgi (またはお気に入りのフレームワークを挿入) スクリプトがそのユース ケースに最適です。
inetd の良い例は次のとおりです。
lock = Mutex.new
trap :HUP { #log the connection and cleanup }
trap :USR1 { lock.synchronize do #stuff; end }
trap :TERM { #clean up }
trap :KILL { #clean up and die with error codes }
puts "App name - version"
loop do
('%s> ' % Console.prompt).display
input = gets.chomp
command, *params = input.split /\s/
case command
when /\Ahelp\z/i
puts App.help_text
when /\Ado\z/i
Action.perform *params
when /\Aquit\z/i
exit
else
puts 'Invalid command'
end
end
exit
次のように編集/etc/services
してアプリを含めます: myapp port#/proto
次のように (または xinetd.d)にアプリを追加します/etc/inetd.conf
: myapp stream tcp6 nowait myappuser /path/to/myapp myapp -arg_flags