Relanzar un proceso con Python
Problema: Tienes un proceso que de vez en cuando se cae y quieres que se levante de forma automática.
Ejemplo: Tengo un servidor Minecraft Spigot que al ser un proceso Java de vez encuando me lo encuentro caído. Aplico la solucion de lanzarlo con programa Python
import os
import subprocess
while True:
rc = subprocess.call(['java', '-Xms1024M', '-Xmx1024M', '-jar', 'spigot.jar', 'nogui'])
if rc == 0:
break
else:
print("...------- CRASH SERVIDOR MINECRAFT -----")
print("Relanzando Servidor MineCraft")
Para lanzar el proceso utilizo la clase subprocess.call que permite ejecutar un comando de shell. Y recogemos el return code de esa ejecución. Si se interrumpe y no tenemos un exit diferente de 0, volvemos a lanzar el proceso nuevamente.
En este ejemplo si quiero parar el servidor Minecraft, desde la consola del servidor ejecuto el comando stop y la salida del comando tiene como return code un 0, por lo tanto también finaliza el programa Python.