Constantemente monitorea un programa / proceso usando Python

Estoy tratando de monitorear constantemente un proceso que es básicamente un programa Python. Si el programa se detiene, tengo que volver a iniciar el programa. Estoy usando otro programa de Python para hacerlo.

Por ejemplo, digamos que tengo que ejecutar constantemente un proceso llamadorun_constantly.py. Inicialmente ejecuté este programa manualmente, el cual escribe su ID de proceso en el archivo "PID" (en la ubicación out / PROCESSID / PID).

Ahora corro otro programa que tiene lasiguiente código para monitorear el programarun_constantly.py desde un entorno Linux:

def Monitor_Periodic_Process():

    TIMER_RUNIN = 1800
    foo = imp.load_source("Run_Module","run_constantly.py")
    PROGRAM_TO_MONITOR = ['run_constantly.py','out/PROCESSID/PID']
    while(1):
        # call the function checkPID to see if the program is running or not
        res = checkPID(PROGRAM_TO_MONITOR)
        # if res is 0 then program is not running so schedule it
        if (res == 0):
            date_time = datetime.now()
            scheduler.add_cron_job(foo.Run_Module, year=date_time.year, day=date_time.day, month=date_time.month, hour=date_time.hour, minute=date_time.minute+2)
            scheduler.start()
            scheduler.get_jobs()
            time.sleep(TIMER_NOT_RUNIN)
            continue
        else:
            #the process is running sleep and then monitor again
            time.sleep(TIMER_RUNIN)
            continue

No he incluido elcheckPID() funciona aquicheckPID() básicamente verifica si el ID del proceso todavía existe (es decir, si el programa aún se está ejecutando) y si no existe, devuelve0. En el programa anterior, verifico sires == 0, y si es así, entonces uso el programador de Python para programar el programa. Sin embargo, el principal problema al que me enfrento actualmente es que el ID de proceso de este programa y elrun_constantly.py programase vuelve igual una vez que programe elrun_constantly.py utilizando lascheduler.add_cron_job() función. Así que si el programarun_constantly.py se bloquea, el siguiente programa todavía piensa que elrun_constantly.py se está ejecutando (ya que ambos ID de proceso son iguales), y por lo tanto continúa ingresando en el bucle else para dormir y monitorear nuevamente.

¿Alguien puede decirme cómo resolver este problema? ¿Existe una forma sencilla de monitorear constantemente un programa y reprogramarlo cuando se bloquea?

Respuestas a la pregunta(3)

Su respuesta a la pregunta