利用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 os import sys #初始化進程名稱和命令路徑 #使用參數方式傳遞程序名稱和程序路徑 #p_name = sys.argv[1] #p_path = sys.argv[2] #Linux p_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)
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。