我正在尝试不断监视一个基本上是 Python 程序的进程。如果程序停止,那么我必须重新启动程序。我正在使用另一个 Python 程序来执行此操作。
例如,假设我必须不断运行一个名为run_constantly.py
. 我最初手动运行该程序,它将其进程 ID 写入文件“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()
基本上检查进程 ID 是否仍然存在(即程序是否仍在运行),如果不存在,则返回0
. 在上面的程序中,我检查 if res == 0
,如果是,那么我使用 Python 的调度程序来调度程序。但是,我目前面临的主要问题是,一旦我安排使用该功能,该程序的进程 ID 和该run_constantly.py
程序的进程 ID就会相同。所以如果程序崩溃了,下面的程序仍然认为它正在运行(因为两个进程ID相同),因此继续进入else循环休眠并再次监控。run_constantly.py
scheduler.add_cron_job()
run_constantly.py
run_constantly.py
有人可以告诉我如何解决这个问题吗?有没有一种简单的方法可以持续监控程序并在程序崩溃时重新安排它?