monitor de múltiples servidores / restarter automático en Python
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
}
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.