#!/usr/bin/env python
# coding:utf-8
import time
import subprocess
import smtplib
from email.mime.text import MIMEText # ------------获取内存过载信息------------
cmd = "cd /data/scripts;rm -f mem.info;ps aux | sort -k6rn | head -20| awk '{print $2,$6/1024,$11}' > ./mem.info"
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
time.sleep(3)
meminfo = []
i = 0
with open('mem.info') as obj:
for line in obj.readlines():
line = line.split()
line[0] = int(line[0])
line[1] = float(line[1])
if line[1] > 1000:
memmsg = "pid:%d mem:%dMB" % (line[0], line[1])
meminfo.insert(i, memmsg)
i = i + 1 getip = subprocess.Popen('curl ifconfig.me',stdout=subprocess.PIPE,shell=True)
ip = getip.stdout.read().strip()
meminfo.insert(0, ip)
meminfo_str = "\n".join(meminfo) # -------------发送告警邮件---------------
len = len(meminfo)
if len > 1:
from_addr = 'xx@163.com'
passwd = '网易授权码'
to_addr = 'xx@xx.com'
smtphost = 'smtp.163.com' message = MIMEText(meminfo_str, 'plain', 'utf-8')
message['subject'] = 'memery warning'
message['from'] = from_addr
message['to'] = to_addr
server = smtplib.SMTP_SSL(smtphost, 465)
server.login(from_addr, passwd)
server.sendmail(from_addr, to_addr, message.as_string())
server.quit()

 

使用subprocess.Popen调用shell cmd,把结果输出到文件

把文件的每行数据读出来,然后用split方法转化为列表,根据内存值这个元素进行判断。

把ip和符合条件的行合成一个列表。然后用"\n".join(),以换行符为分隔符转为字符串,目的是发送邮件。

判断列表的长度,大于1表示有ip以外的元素,启用邮件发送操作。

调用smtplib模块,登录网易的SMTP_SSL接口,发送邮件。

最新文章

  1. 在C#代码中应用Log4Net(三)Log4Net中配置文件的解释
  2. 51NOD算法马拉松11 B君的竞技场
  3. 代码规范[iOS]
  4. JavaScript基础知识之——Location 对象详解
  5. 20145120 《Java程序设计》第7周学习总结
  6. SendKeys总结
  7. 获取Android设备屏幕分辨率
  8. 基于网络的服装定制MTM系统研究 - 硕士论文 - 道客巴巴
  9. HTML5 canvas准备知识
  10. 基于visual Studio2013解决C语言竞赛题之0419误差控制
  11. 页面异步请求会保留原有的js内容
  12. return 的返回值与结束功能
  13. Django models文件模型变更注意事项(表结构的修改)
  14. 【js】正则
  15. 18.数组(一)之认识java数组
  16. Git服务器,仓库的hook监控
  17. 线程安全的ConcurrentQueue<T>队列
  18. 关于web标准的一些想法
  19. 【转】MySQL实现Oracle里的 rank()over(ORDER BY) 功能
  20. 转载:手把手教你做iOS推送

热门文章

  1. RecyclerViewDemo
  2. v-model指令及其修饰符
  3. MFC 的 Picture Control 加载 BMP/PNG 图片的方法
  4. zTree async 动态参数处理
  5. BAPI_PO_CEATE 与PO_1
  6. linux下如何用php读取word
  7. 浅谈js执行机制
  8. Tomcat调优策略
  9. 第三届蓝桥杯C++B组省赛
  10. hdu-5718 Oracle(水题)