Я задал этот вопрос более или менее прежде на stackoverflow и верил, это, чтобы быть решенным (следовательно принял ответ), но оказывается, что он не был решен.:-(
Проще говоря, я записал сценарий Python, который просто выходной текст постоянно к stdout, это - все, что он делает 24/7. Я связал его с этим xinetd файлом
service myservice { instances = 1 port = 887 socket_type = stream type = UNLISTED wait = no user = nobody server = /usr/local/bin/myscript.py only_from = 127.0.0.1 192.168.1.2 disable = no max_load = 5.0 nice = 5 per_source = 1 }
Это хорошо работает в так же как тогда, когда клиент соединяется, это начинает извергать текст на их консоли. Проблема состоит в том, когда клиент разъединяется, запущенный процесс остается открытым, блокируя порт. Существует только один разрешенный клиент (экземпляры = 1), но это может произойти когда клиентские перезагрузки, в то время как соединено.
Ранее я думал, что это было то, потому что сценарий Python игнорировал сигналы уничтожения (которым это было), но с зафиксированным, наблюдается то же поведение. Для разъяснения уничтожьте-1, и т.д. теперь счастливо наблюдается сценарием Python.
Я предполагаю, что это - проблема xinetd и довольно простой зафиксировать?
Заставьте серверный процесс выйти, когда он обнаружит разъединение.
Added
Когда ОС сервера обнаруживает, что соединение TCP было закрыто, читает в и пишет из stdout
/stderr
перестанет работать с:
IOError: [Errno 104] Connection reset by peer
Поэтому удостоверьтесь, что Ваш код не игнорирует исключения, когда они происходят.
Однако это (и любой другой метод) будет только работать, когда сервер будет знать о разъединении. Чистые перезагрузки обычно закрывают все соединения TCP, но "отключение" не делает.
Вы попытались установить wait = yes
?
Согласно документации, которая является
wait — Defines whether the service is single-threaded (yes) or multi-threaded (no).