Постоянный мониторинг программы / процесса с использованием Python
Я пытаюсь постоянно отслеживать процесс, который в основном представляет собой программу на Python. Если программа останавливается, я должен запустить программу снова. Я использую другую программу Python для этого.
Например, скажем, я должен постоянно запускать процесс под названиемrun_constantly.py
, Я изначально запускаю эту программу вручную, которая записывает свой идентификатор процесса в файл "PID» (в локации Out / PROCESSID / PID).
Теперь я запускаю другую программу, которая имеетследующий код следить за программойrun_constantly.py
из среды 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
Я не включилcheckPID()
функционировать здесь.checkPID()
в основном проверяет, существует ли идентификатор процесса (т. е. работает ли программа), и если он не существует, возвращается0
, В приведенной выше программе я проверяю,res == 0
и если да, то я использую Python 'Планировщик для планирования программы. Однако основная проблема, с которой я сейчас сталкиваюсь, заключается в том, что идентификатор процесса этой программы иrun_constantly.py
программаоказывается таким же как только я планируюrun_constantly.py
с использованиемscheduler.add_cron_job()
функция. Так что если программаrun_constantly.py
вылетает, следующая программа все еще думает, чтоrun_constantly.py
работает (так как оба идентификатора процесса одинаковы) и, следовательно, продолжает входить в цикл else, чтобы спать и отслеживать снова.
Может кто-нибудь сказать мне, как решить эту проблему? Есть ли простой способ постоянно контролировать программу и перепланировать ее после сбоя?