利用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生成不重复随机值的方法
May 11 Python
python模块之re正则表达式详解
Feb 03 Python
Windows系统下多版本pip的共存问题详解
Oct 10 Python
Python Socket使用实例
Dec 18 Python
python matplotlib 在指定的两个点之间连线方法
May 25 Python
Python连接Redis的基本配置方法
Sep 13 Python
pyqt 实现在Widgets中显示图片和文字的方法
Jun 13 Python
numpy.array 操作使用简单总结
Nov 08 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
python zip()函数的使用示例
Sep 23 Python
python cv2图像质量压缩的算法示例
Jun 04 Python
Python日志模块logging用法
Jun 05 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为SHOPEX增加日志功能代码
2010/07/02 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
基于jQuery实现自动轮播旋转木马特效
2015/11/02 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
2019/05/20 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
Python 统计字数的思路详解
2018/05/08 Python
python实现简单登陆系统
2018/10/18 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
python multiprocessing多进程变量共享与加锁的实现
2019/10/02 Python
python使用建议与技巧分享(二)
2020/08/17 Python
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
澳大利亚优质的家居用品和生活方式公司:Bed Bath N’ Table
2019/04/16 全球购物
MYSQL基础面试题
2012/05/13 面试题
大学校园生活自我鉴定
2014/01/13 职场文书
运动会邀请函范文
2014/02/06 职场文书
元旦文艺汇演主持词
2014/03/26 职场文书
英语分层教学实施方案
2014/06/15 职场文书
2015年幼儿教师个人工作总结
2015/05/20 职场文书
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers