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中的sort方法使用详解
Jul 25 Python
使用Python发送邮件附件以定时备份MySQL的教程
Apr 25 Python
Python如何快速上手? 快速掌握一门新语言的方法
Nov 14 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
Jan 02 Python
用Python编写一个高效的端口扫描器的方法
Dec 20 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
Django基础知识 URL路由系统详解
Jul 18 Python
Python高级特性 切片 迭代解析
Aug 23 Python
pandas 对group进行聚合的例子
Dec 27 Python
使用Python操作MySQL的小技巧
Sep 10 Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 Python
Django基础CBV装饰器和中间件
Mar 22 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
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
Javascript学习笔记5 类和对象
2010/01/11 Javascript
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
微信小程序订阅消息(java后端实现)开发
2020/06/01 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
2020/09/08 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
Linux 修改Python命令的方法示例
2018/12/03 Python
详解Python装饰器
2019/03/25 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
Python 切分数组实例解析
2019/11/07 Python
python判断无向图环是否存在的示例
2019/11/22 Python
Python同时处理多个异常的方法
2020/07/28 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
歌颂祖国的演讲稿
2014/05/04 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
公司周年庆寄语
2019/06/21 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python
如何用Laravel包含你自己的帮助函数
2021/05/27 PHP