利用Hyperic調用Python,實現進程守護,供大家參考,具體內容如下
調用操作系統方法獲取進程信息,判斷進程是否存在,Linux和Windows均支持,區別在于獲取進程信息和啟動進程的方法不同。
代碼如下:
#!/usr/bin/python#-*- coding:utf-8 -*- """名稱:進程檢查腳本作者:wjzhu時間:2014-06-30功能:根據進程名稱,判斷進程是否存在,執行相應操作參數:p_name:進程名稱|p_path:進程啟動路徑返回值:0:進程存在,正常退出|1:進程不存在,執行命令后,進程存在|2:其他異常情況 update:2014-07-29 啟動進程前調用os.chdir()方法,改變當前工作目錄,解決部分進程啟動時依賴工作目錄問題 """ import osimport sys #初始化進程名稱和命令路徑 #使用參數方式傳遞程序名稱和程序路徑#p_name = sys.argv[1]#p_path = sys.argv[2] #Linuxp_name = "redis"p_path = "/usr/local/redis-2.8.11/src/redis-server/usr/local/redis-2.8.11/redis.conf" #Windows#p_name = "filezilla.exe"#p_path = "C://Program Files (x86)//FileZilla FTP Client//filezilla.exe"   #Linux平臺調用ps命令/Win平臺調用tasklist命令,判斷進程是否存在,傳入進程名稱,返回為查詢得到的進程個數def process_exit(process_name):  #Linux  p_checkresp = os.popen('ps aux | grep "' + process_name + '" | grep -v grep').readlines()   #Windows,為避免進程名稱被截斷,輸出格式為csv,使用tasklist /fo csv  #p_checkresp = os.popen('tasklist /fo csv | find "' + process_name + '"').readlines()  return len(p_checkresp) #Linx平臺調用os.system方法啟動命令/Win平臺調用os.startfile方法啟動命令,傳入命令路徑,無返回值def process_exec(process_path):  #將工作目錄切換到啟動腳本所在目錄,解決部分進程啟動時依賴工作目錄問題  os.chdir(os.path.dirname(process_path))   #Linxu  os.system(process_path)   #Windows  #os.startfile(process_path) #主函數if __name__ == '__main__':   #查詢進程個數大于1,返回0,不做任何操作,退出  if process_exit(p_name) >= 1:    print 0    sys.exit(0)       #查詢進程個數等于0  elif process_exit(p_name) == 0:    #執行啟動命令    process_exec(p_path)    #查詢進程個數大于1,返回1,啟動成功,退出    if process_exit(p_name) >= 1:      print 1      sys.exit(0)    #啟動失敗,返回2,退出    else:      print 2      sys.exit(0)         #其他問題,返回2,退出  else:    print 2    sys.exit(0)以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林站長站。
新聞熱點
疑難解答