Постоянный мониторинг программы / процесса с использованием 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, чтобы спать и отслеживать снова.

Может кто-нибудь сказать мне, как решить эту проблему? Есть ли простой способ постоянно контролировать программу и перепланировать ее после сбоя?

Ответы на вопрос(3)

Ваш ответ на вопрос