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在Windows8下获取本机ip地址的方法
Mar 14 Python
在Python中处理日期和时间的基本知识点整理汇总
May 22 Python
django配置连接数据库及原生sql语句的使用方法
Mar 03 Python
如何利用Anaconda配置简单的Python环境
Jun 24 Python
opencv3/python 鼠标响应操作详解
Dec 11 Python
Python&&GDAL实现NDVI的计算方式
Jan 09 Python
Python版中国省市经纬度
Feb 11 Python
python tkinter之 复选、文本、下拉的实现
Mar 04 Python
python由已知数组快速生成新数组的方法
Apr 08 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
May 03 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
Python异常类型以及处理方法汇总
Jun 05 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随机生成随机个数的字母组合示例
2014/01/14 PHP
javascript 日期常用的方法
2009/11/11 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
Vue-cli@3.0 插件系统简析
2018/09/05 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
2018/12/13 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
详解tensorflow载入数据的三种方式
2018/04/24 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
Django ORM filter() 的运用详解
2020/05/14 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
一级方程式赛车官方网上商店:F1 Store(支持中文)
2018/01/12 全球购物
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
专营店会计助理岗位职责
2013/11/29 职场文书
摄影助理岗位职责
2014/02/07 职场文书
公司合作协议书范本
2014/04/18 职场文书
励志演讲稿大全
2014/08/21 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
python实现的web监控系统
2021/04/27 Python
Python中异常处理用法
2021/11/27 Python