python监控进程状态,记录重启时间及进程号的实例


Posted in Python onJuly 15, 2019

本脚本为本人在性能测试过程中编写,用于对进程状态的监控,也可以用于日常的监控,适用性一般,扩展性还行

# -*- coding: UTF-8 -*-
# author=baird_xiang
import os
import time
import re
import copy

nginxRestart_num= -1
nginxReload_num= -1
logSender_num= -1
es_num= -1
nginxParent_pid=[]
nginxChild_pid=[]
logSender_pid=[]
es_pid=[]

nginxRestart_time =[]
nginxReload_time=[]
logSender_time=[]
es_time=[]
def get_restart(thread_name):
  global nginxRestart_num,nginxReload_num,logSender_num,es_num
  while True:
    try:
      for i in thread_name:
        if i=='nginx_restart':
          nP_pid = os.popen("sudo pgrep -lo nginx |grep -v grep|awk '{print $1}'").read()
          nP_time = os.popen("sudo ps aux|grep nginx |grep -v grep|awk 'NR==1{print $9}'").read()
          nginx_path = os.popen("sudo ps aux|grep nginx |grep -v grep|awk 'NR==1{print $11}'").read()
          date = time.strftime('%Y-%m-%d',time.localtime(time.time()))
          nP_time_now = date + '-' + nP_time.split('\n')[0] 
          if nP_pid and (nP_pid not in nginxParent_pid) and (nginx_path=='/usr/sbin/nginx\n'):
              nginxParent_pid.append(nP_pid)
              nginxRestart_num=nginxRestart_num+1
          # if nP_time and (nP_time_now not in nginxRestart_time) and (color!='-c\n'):
              nginxRestart_time.append(nP_time_now)    
      
        elif i=='nginx_reload':
          nR_pid = os.popen("sudo pgrep -ln nginx|grep -v grep |awk '{print $1}'").read()
          nR_time = os.popen("sudo ps aux|grep nginx |grep -v grep|awk 'NR==2{print $9}'").read()
          nginx_path = os.popen("sudo ps aux|grep nginx |grep -v grep|awk 'NR==1{print $11}'").read()
          date = time.strftime('%Y-%m-%d',time.localtime(time.time()))
          nR_time_now = date + '-' + nR_time.split('\n')[0]
          if nR_pid and (nR_pid not in nginxChild_pid) and (nginx_path=='/usr/sbin/nginx\n') :
              nginxChild_pid.append(nR_pid)
              nginxReload_num=nginxReload_num+1-nginxRestart_num
          #if nR_time and (nR_time_now not in nginxReload_time) and (color!='-c\n'):
              nginxReload_time.append(nR_time_now)
        
        elif i=='log_sender':
          lS_pid = os.popen("sudo ps aux|grep log_sender |grep -v grep|awk 'NR==1{print $2}'").read()
          lS_time = os.popen("sudo ps aux|grep log_sender |grep -v grep|awk 'NR==1{print $9}'").read()
          color = os.popen("sudo ps aux|grep log_sender |grep -v grep|awk 'NR==1{print $12}'").read()
          wwwdate = os.popen("sudo ps aux|grep log_sender |grep -v grep|awk 'NR==1{print $1}'").read()
          date = time.strftime('%Y-%m-%d',time.localtime(time.time()))
          lS_time_now = date + '-' + lS_time.split('\n')[0]
          if lS_pid and (color!='-c\n') and ( lS_pid not in logSender_pid ) and (wwwdate=='www-data\n'):
              logSender_pid.append(lS_pid)
              logSender_num=logSender_num+1
          #if lS_time and (lS_time_now not in logSender_time) and (color!='-c\n'):
              logSender_time.append(lS_time_now)
        elif (i=='elasticsearch') and (os.popen("sudo ps -ef |grep elasticsearch |grep -v grep|awk 'NR==1{print $2}'").read()):
          time.sleep(1)
          e_pid = os.popen("sudo ps aux|grep elasticsearch |grep -v grep|awk 'NR==1{print $2}'").read()
          e_time = os.popen("sudo ps aux|grep elasticsearch |grep -v grep|awk 'NR==1{print $9}'").read()
          color = os.popen("sudo ps aux|grep elasticsearch |grep -v grep|awk 'NR==1{print $12}'").read()
          elastic = os.popen("sudo ps aux|grep elasticsearch |grep -v grep|awk 'NR==1{print $1}'").read()
          date = time.strftime('%Y-%m-%d',time.localtime(time.time()))  
          e_time_now = date + '-' + e_time.split('\n')[0] 
          if e_pid and (color!='-c\n') and (e_pid not in es_pid) and (elastic =='elastic+\n'):
            es_pid.append(e_pid)
            es_num=es_num+1
         # if e_time and (e_time_now not in es_time) and (color!='-c\n') and (elastic =='elastic+\n'):
            es_time.append(e_time_now)
        else:
          pass
    except (OSError,IOError): #防止进入循环但是这个时候进程重启,导致popen读取不到进程信息就会出错
      pass   
def set_nginxRestart_txt():
  now_path = os.getcwd()
  file_name = now_path + '/nginxRestart_%s.txt'%(nginxRestart_time[-1])
  #写入文本
  file1 = open(file_name,'w')
  for i in range(1,len(nginxRestart_time)):
    file1.write('重启时间:'+nginxRestart_time[i]+'重启前父进程号: '+ nginxParent_pid[i-1]+'重启后父进程号: ' +nginxParent_pid[i] + '\n')
  
  file1.close()
  file2 = open(file_name,'a+')
  file2.write('nginx restart次数为: ' + str(nginxRestart_num) + '\n')
  file2.close()
def set_nginxReload_txt():
  now_path = os.getcwd()
  file_name = now_path + '/nginxReload_%s.txt'%(nginxReload_time[-1])
  #写入文本
  file1 = open(file_name,'w')
  for i in range(1,len(nginxReload_time)):
    file1.write('重启时间:'+nginxReload_time[i] + '\n')
  
  file1.close()
  file2 = open(file_name,'a+')
  file2.write('nginx reload次数为:' + str(nginxReload_num) + '\n')
  file2.close()
def set_logsender_txt():
  now_path = os.getcwd()
  file_name = now_path + '/logsender_restart_%s.txt'%(logSender_time[-1])
  #写入文本
  file1 = open(file_name,'w')
  for i in range(1,len(logSender_time)):
    file1.write('重启时间:'+logSender_time[i]+'重启前进程号: '+ logSender_pid[i-1]+'重启后进程号: ' + logSender_pid[i] + '\n')
  
  file1.close()
  file2 = open(file_name,'a+')
  file2.write('logsender重启次数为: '+ str(logSender_num) + '\n')
  file2.close()
def set_es_txt():
  now_path = os.getcwd()
  file_name = now_path + '/esRestart_%s.txt'%(es_time[-1])
  #写入文本
  file1 = open(file_name,'w')
  for i in range(1,len(es_time)):
    file1.write('重启时间:'+es_time[i] +'重启前进程号: ' +es_pid[i-1] +'重启后进程号: ' + es_pid[i] +'\n')
  
  file1.close()
  file2 = open(file_name,'a+')
  file2.write('elasticsearch重启次数为: ' + str(es_num) + '\n')
  file2.close()
if __name__ =="__main__":
  thread_name=['nginx_restart','nginx_reload','log_sender','elasticsearch']
  try:
    get_restart(thread_name)
  except (KeyboardInterrupt,SystemExit):
    set_nginxRestart_txt()
    set_nginxReload_txt()
    set_logsender_txt()
    set_es_txt()

以上这篇python监控进程状态,记录重启时间及进程号的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中查看变量内存地址的方法
May 05 Python
python如何获取服务器硬件信息
May 11 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 Python
Python3.6实现带有简单界面的有道翻译小程序
Apr 16 Python
Python程序暂停的正常处理方法
Nov 07 Python
python计算无向图节点度的实例代码
Nov 22 Python
python 控制台单行刷新,多行刷新实例
Feb 19 Python
matlab灰度图像调整及imadjust函数的用法详解
Feb 27 Python
Python Parser的用法
May 12 Python
OpenCV-Python实现轮廓拟合
Jun 08 Python
Pygame Event事件模块的详细示例
Nov 17 Python
详解OpenCV获取高动态范围(HDR)成像
Apr 29 Python
Python 获取windows桌面路径的5种方法小结
Jul 15 #Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 #Python
Python实现Mysql数据统计及numpy统计函数
Jul 15 #Python
通过python改变图片特定区域的颜色详解
Jul 15 #Python
用Python+OpenCV对比图像质量的几种方法
Jul 15 #Python
python3实现斐波那契数列(4种方法)
Jul 15 #Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 #Python
You might like
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
微信API接口大全
2015/04/15 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
javascript(jquery)利用函数修改全局变量的代码
2009/11/02 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
2014/09/09 Javascript
Jquery ajax请求导出Excel表格的实现代码
2016/06/08 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
懒加载实现的分页&&网站footer自适应
2016/12/21 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
2017/05/17 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
新手快速上手webpack4打包工具的使用详解
2019/01/28 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
Python ljust rjust center输出
2008/09/06 Python
python新手经常遇到的17个错误分析
2014/07/30 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
django解决订单并发问题【推荐】
2019/07/31 Python
如何在python中写hive脚本
2019/11/08 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
python模块如何查看
2020/06/16 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
公司担保书格式范文
2014/05/12 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
学前班语言教学计划
2015/01/20 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
教师节主持词开场白
2015/05/29 职场文书
简历自我评价范文
2019/04/24 职场文书
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript