Сервисы inetd действительно хороши для одноразовых приложений, которые должны принимать данные и взаимодействовать с пользователем в определенной степени. ИТ работает через tcp / udp, передавая данные через сокет (x) inetd в std {in, out, err}. Приложения inetd также хорошо работают с tcpwrappers для улучшения безопасности через файлы системной политики и ACL.
Так что да, вы бы написали свое приложение, как его консольное приложение, поскольку на самом деле это консольное приложение. Просто представьте, что inetd - это прозрачный обратный прокси-сервер от сети до входов вашего приложения.
Совет, напишите свой код для правильной обработки сигналов процесса, и если вам нужно взаимодействовать с другим процессом в системе, используйте для этого сокеты unix / fifo.
Кроме того, не пытайтесь написать приложение, которое транслирует много данных одновременно или требует большого количества соединений. Масштабируемость является проблемой, поскольку inetd становится узким местом, поэтому Apache и Sendmail отказались от поддержки inetd и вместо этого работают как моно-приложения. HTTP лучше подходит для этой роли, и сценарий fastcgi (или вставьте любимую структуру) с nginx лучше всего подходит для этого варианта использования.
Хороший пример для 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 # / proto
и добавьте ваше приложение в /etc/inetd.conf
(или xinetd.d) следующим образом:
myapp stream tcp6 nowait myappuser / path / to / myapp myapp -arg_flags