Pregunta

Tengo 2 programas de servidor que se debe iniciar con el uso de GNU Screen. Me gustaría endurecer estos servidores contra choques con un programa basado en Python que se inicia cada sesión de pantalla y supervisa el proceso del servidor. Si el proceso de servidor se bloquea, necesito el código python para matar a la sesión de pantalla extraña y reiniciar el servidor con pantalla de nuevo.

Estoy muy nuevo en Python, pero estoy usando esta oportunidad para enseñar a mí mismo. Soy consciente de que esto se puede hacer de secuencias de comandos bash. Pero quiero aprovechar este código para funciones futuras, por lo que debe ser sólo pitón.

El pseudocódigo es como sigue:

thread-one {
     While 1:
     start server 1 using screen
     wait for server to end
     end while
}

thread-two {
     While 1:
     start server 2 using screen
     wait for server to end
     end while
}
¿Fue útil?

Solución

"necesidad de ser multi-hilo para manejar el reinicio de dos programas separados"

No veo por qué.

import subprocess

commands = [ ["p1"], ["p2"] ]
programs = [ subprocess.Popen(c) for c in commands ]
while True:
    for i in range(len(programs)):
        if programs[i].returncode is None:
            continue # still running
        else:
            # restart this one
            programs[i]= subprocess.Popen(commands[i])
        time.sleep(1.0)

Otros consejos

En realidad, no debería ejecutar el software de producción en una pantalla. Si el servidor se reinicia, ¿cómo va a ponerlo en marcha? ¿A mano? También pienso que usted está tratando de reinventar la rueda. Ya hay bastante buenas herramientas que hacen lo que necesita.

  

launchtool le permite ejecutar una   comando suministrado por el usuario supervisar su   la ejecución de muchas maneras, tales como   el control de su entorno, bloqueando   señales, el registro de su salida, el cambio de   permisos de usuario y de grupo, limitando   el uso de recursos, reiniciarlo si   falla, se ejecuta de forma continua,   convirtiéndolo en un demonio, y mucho más.

.

  

Monit es un código abierto   utilidad para la gestión y supervisión,   procesos, archivos, directorios y   sistemas de archivos en un sistema UNIX. Monit   lleva a cabo el mantenimiento automático y   reparar y puede ejecutar significativa   acciones causales en situaciones de error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top