He hecho esta pregunta más o menos antes en stackoverflow y creía que se resolvería (por lo tanto, acepté la respuesta), pero resulta que no se resolvió. :-(
En términos simples, he escrito un script de Python que solo envía texto constantemente a stdout, eso es todo lo que hace 24/7. Lo he vinculado a este archivo xinetd
servicio myservice { instancias = 1 puerto = 887 socket_type = stream tipo = SIN LISTA espera = no usuario = nadie servidor = /usr/local/bin/myscript.py only_from = 127.0.0.1 192.168.1.2 deshabilitar = no max_load = 5.0 bonito = 5 per_source = 1 }
Esto funciona bien tanto como cuando un cliente se conecta, comienza a arrojar texto en su consola. El problema es que cuando el cliente se desconecta, el proceso iniciado permanece abierto y bloquea el puerto. Solo se permite un cliente (instancias = 1), pero esto puede ocurrir cuando el cliente se reinicia mientras está conectado.
Anteriormente pensé que esto se debía a que el script de Python ignoraba las señales de muerte (que era), pero con esto solucionado, se observa el mismo comportamiento. Para aclarar, el script python ahora observa felizmente matar, etc., etc.
¿Asumo que este es un problema de xinetd y bastante fácil de solucionar?
sys.stdin
está vinculado al socket TCP, y si el socket está cerradosys.stdin.write
fallará. Lo mismo se aplica a cualquier idioma: no puede escribir en un socket cerrado.sys.stdin
ysys.stdout
. (Sí, debería haber sidostdin.read()
ostdout.write()
.)¿Has intentado configurar
wait = yes
?Según la documentación, eso es
fuente