利用Hyperic調(diào)用Python實(shí)現(xiàn)進(jìn)程守護(hù)
利用Hyperic調(diào)用Python,實(shí)現(xiàn)進(jìn)程守護(hù),供大家參考,具體內(nèi)容如下
調(diào)用操作系統(tǒng)方法獲取進(jìn)程信息,判斷進(jìn)程是否存在,Linux和Windows均支持,區(qū)別在于獲取進(jìn)程信息和啟動(dòng)進(jìn)程的方法不同。
代碼如下:
#!/usr/bin/python
#-*- coding:utf-8 -*-
"""
名稱(chēng):進(jìn)程檢查腳本
作者:wjzhu
時(shí)間:2014-06-30
功能:根據(jù)進(jìn)程名稱(chēng),判斷進(jìn)程是否存在,執(zhí)行相應(yīng)操作
參數(shù):p_name:進(jìn)程名稱(chēng)|p_path:進(jìn)程啟動(dòng)路徑
返回值:0:進(jìn)程存在,正常退出|1:進(jìn)程不存在,執(zhí)行命令后,進(jìn)程存在|2:其他異常情況
update:2014-07-29 啟動(dòng)進(jìn)程前調(diào)用os.chdir()方法,改變當(dāng)前工作目錄,解決部分進(jìn)程啟動(dòng)時(shí)依賴(lài)工作目錄問(wèn)題
"""
import os
import sys
#初始化進(jìn)程名稱(chēng)和命令路徑
#使用參數(shù)方式傳遞程序名稱(chēng)和程序路徑
#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平臺(tái)調(diào)用ps命令/Win平臺(tái)調(diào)用tasklist命令,判斷進(jìn)程是否存在,傳入進(jìn)程名稱(chēng),返回為查詢(xún)得到的進(jìn)程個(gè)數(shù)
def process_exit(process_name):
#Linux
p_checkresp = os.popen('ps aux | grep "' + process_name + '" | grep -v grep').readlines()
#Windows,為避免進(jìn)程名稱(chēng)被截?cái)?,輸出格式為csv,使用tasklist /fo csv
#p_checkresp = os.popen('tasklist /fo csv | find "' + process_name + '"').readlines()
return len(p_checkresp)
#Linx平臺(tái)調(diào)用os.system方法啟動(dòng)命令/Win平臺(tái)調(diào)用os.startfile方法啟動(dòng)命令,傳入命令路徑,無(wú)返回值
def process_exec(process_path):
#將工作目錄切換到啟動(dòng)腳本所在目錄,解決部分進(jìn)程啟動(dòng)時(shí)依賴(lài)工作目錄問(wèn)題
os.chdir(os.path.dirname(process_path))
#Linxu
os.system(process_path)
#Windows
#os.startfile(process_path)
#主函數(shù)
if __name__ == '__main__':
#查詢(xún)進(jìn)程個(gè)數(shù)大于1,返回0,不做任何操作,退出
if process_exit(p_name) >= 1:
print 0
sys.exit(0)
#查詢(xún)進(jìn)程個(gè)數(shù)等于0
elif process_exit(p_name) == 0:
#執(zhí)行啟動(dòng)命令
process_exec(p_path)
#查詢(xún)進(jìn)程個(gè)數(shù)大于1,返回1,啟動(dòng)成功,退出
if process_exit(p_name) >= 1:
print 1
sys.exit(0)
#啟動(dòng)失敗,返回2,退出
else:
print 2
sys.exit(0)
#其他問(wèn)題,返回2,退出
else:
print 2
sys.exit(0)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python機(jī)器學(xué)習(xí)特征重要性分析的8個(gè)常用方法實(shí)例探究
本文詳細(xì)介紹8種常用的方法,涵蓋了基于決策樹(shù)、集成學(xué)習(xí)模型以及統(tǒng)計(jì)學(xué)方法的特征重要性分析,從決策樹(shù)模型到SHAP值,深入探討每種方法的原理和示例,幫助全面了解如何評(píng)估特征的重要性,將能更好地理解特征對(duì)模型預(yù)測(cè)的貢獻(xiàn),為提升模型性能和解釋模型決策提供有力支持2024-01-01
LyScript實(shí)現(xiàn)對(duì)內(nèi)存堆棧掃描的方法詳解
LyScript插件中提供了三種基本的堆棧操作方法,其中push_stack用于入棧,pop_stack用于出棧,peek_stac可用于檢查指定堆棧位置處的內(nèi)存參數(shù)。所以本文將利用這一特性實(shí)現(xiàn)對(duì)內(nèi)存堆棧掃描,感興趣的可以了解一下2022-08-08
Pyinstaller打包Pytorch框架所遇到的問(wèn)題
Pytorch在python界用得比較多,打包容易失敗,本文主要介紹了Pyinstaller打包Pytorch框架所遇到的問(wèn)題,文中介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
python中if-elif-else語(yǔ)句實(shí)例用法講解
在本篇文章里小編給大家整理的是一篇關(guān)于python中if-elif-else語(yǔ)句的使用注意事項(xiàng),有需要的便宜么可以跟著參考下。2021-10-10
python 獲取毫秒數(shù),計(jì)算調(diào)用時(shí)長(zhǎng)的方法
今天小編就為大家分享一篇python 獲取毫秒數(shù),計(jì)算調(diào)用時(shí)長(zhǎng)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Python 多線(xiàn)程搜索txt文件的內(nèi)容,并寫(xiě)入搜到的內(nèi)容(Lock)方法
今天小編就為大家分享一篇Python 多線(xiàn)程搜索txt文件的內(nèi)容,并寫(xiě)入搜到的內(nèi)容(Lock)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
Python 函數(shù)繪圖及函數(shù)圖像微分與積分
今天小編就為大家分享一篇Python 函數(shù)繪圖及函數(shù)圖像微分與積分,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11

