Stale monitoruj program / proces za pomocą Pythona

Próbuję stale monitorować proces, który jest w zasadzie programem Pythona. Jeśli program się zatrzyma, muszę ponownie uruchomić program. Używam do tego innego programu Python.

Na przykład powiedz, że muszę stale uruchamiać proces o nazwierun_constantly.py. Początkowo uruchamiam ten program ręcznie, który zapisuje swój identyfikator procesu do pliku „PID” (w lokalizacji out / PROCESSID / PID).

Teraz uruchamiam inny program, który manastępujący kod do monitorowania programurun_constantly.py ze środowiska 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

Nie uwzględniłemcheckPID() funkcja tutaj.checkPID() zasadniczo sprawdza, czy identyfikator procesu nadal istnieje (tzn. czy program nadal działa) i czy nie istnieje, wraca0. W powyższym programie sprawdzam, czyres == 0, a jeśli tak, to używam harmonogramu Pythona do zaplanowania programu. Jednak głównym problemem, przed którym obecnie stoję, jest identyfikator procesu tego programu irun_constantly.py programokazuje się być taki sam raz zaplanujęrun_constantly.py używającscheduler.add_cron_job() funkcjonować. Więc jeśli programrun_constantly.py zawiesza się, poniższy program nadal uważa, żerun_constantly.py działa (ponieważ oba identyfikatory procesów są takie same) i dlatego nadal przechodzi do pętli else, aby ponownie zasnąć i monitorować.

Czy ktoś może mi powiedzieć, jak rozwiązać ten problem? Czy istnieje prosty sposób ciągłego monitorowania programu i zmiany jego harmonogramu w przypadku awarii?

questionAnswers(3)

yourAnswerToTheQuestion