捕获运行超过30分钟的进程并发送报告

时间:2017-05-08 17:00:15

标签: python

我写了一个小代码,正在捕获" rm"在OS上运行的进程..下面是代码

bash-4.1$ cat CheckRM1.py
#!/usr/bin/python
import subprocess

def Check_Ps():
    ps = subprocess.Popen(['ps', '-eo' 'pid,user,args,etime='], stdout=subprocess.PIPE)
    output = ps.communicate()[0]
    for line in output.splitlines():
        if 'rm' in line:
            pss = (line)
            print pss

Check_Ps()
  

当我运行代码时,它以下面的形式生成输出:   这基本上给出了进程ID号(PID),用户名,命令&最后是进程运行以来的总时间。   这次基本上使用格式[[dd-]hh:]mm:ss。在我的情况下,它运行超过9分钟。

bash-4.1$ ./CheckRM1.py
22908 karn     rm -i e ee q r w                  09:19

现在我正在寻找运行时间超过30分钟的流程并打印出来并发送邮件。所以,任何想法如何捕获只运行超过30分钟的过程,将不胜感激。

NOte:我正在使用python 2.7。

1 个答案:

答案 0 :(得分:1)

  

问题:...如何仅捕获超过30分钟的进程

你已经接近了,split(..从空白行开始的时间,例如

import re

time_str = line.split(' ')[-1]
#  format [[dd-]hh:]mm:ss
time_items = [int(e) for e in re.split('[-:]', time_str)]

dd = 0
if len(time_items) == 2:
    hh = 0
    mm,ss = time_items
elif len(time_items) == 3:
    hh, mm, ss = time_items
else:
    dd,hh,mm,ss = time_items

print('Process is running {} Days {} Hours {} Minutes {} Seconds'.format(dd,hh,mm,ss))

time_minutes = (hh*60) + mm 
if  time_minutes >= 30:
    # do report

使用Python测试:3.4.2