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?