利用Hyperic调用Python实现进程守护


Posted in Python onJanuary 02, 2018

利用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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python数据操作方法封装类实例
Jun 23 Python
对Tensorflow中权值和feature map的可视化详解
Jun 14 Python
解决python "No module named pip" 的问题
Oct 13 Python
在Pycharm中将pyinstaller加入External Tools的方法
Jan 16 Python
Python3enumrate和range对比及示例详解
Jul 13 Python
django rest framework 实现用户登录认证详解
Jul 29 Python
通过 Python 和 OpenCV 实现目标数量监控
Jan 05 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
Python3爬虫中pyspider的安装步骤
Jul 29 Python
Python虚拟环境的创建和使用详解
Sep 07 Python
python温度转换华氏温度实现代码
Dec 06 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 Python
python实现TF-IDF算法解析
Jan 02 #Python
python实现xlsx文件分析详解
Jan 02 #Python
Python实现KNN邻近算法
Jan 28 #Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 #Python
基于Python实现的ID3决策树功能示例
Jan 02 #Python
python实现基于SVM手写数字识别功能
May 27 #Python
Python中字典的浅拷贝与深拷贝用法实例分析
Jan 02 #Python
You might like
php读取目录所有文件信息dir示例
2014/03/18 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
2018/04/04 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
Vue.js实战之组件的进阶
2017/04/04 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
mockjs+vue页面直接展示数据的方法
2018/12/19 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
python抓取文件夹的所有文件
2018/02/27 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
python实现顺序表的简单代码
2018/09/28 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
pandas-resample按时间聚合实例
2019/12/27 Python
python中的插入排序的简单用法
2021/01/19 Python
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
大学生专科学习生活的自我评价
2013/12/07 职场文书
公司同意接收函
2014/01/13 职场文书
《白鹅》教学反思
2014/04/13 职场文书
白莲教口号
2014/06/18 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
大学生党员批评与自我批评
2014/09/28 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android