一个监控挂载盘的python脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个监控挂载盘的python脚本相关的知识,希望对你有一定的参考价值。

我们产品线有一个公用的挂载盘,主要是用来方便各位开发放置他们自己的一些工作材料,比如异常的日志,或者tcpdump的抓包等等,但是这个盘由于使用人众多,容量自然要有监控,于是就有了写这个脚本的动机。


在这里我写了两个脚本,上面这个是用来监控磁盘容量,然后通过df -h的排序生成前十名占容量最大的文件夹,把这个文件夹的名字和对应的大小重定向到一个叫alarm.txt这个文件里,这个文件就是邮件正文。然后在确定他们的主人,得到他们主人的邮箱地址,最后用下面那个脚本来发送邮件:

#!/usr/bin/env python
# coding=utf-8

import os
import AutoMail
import commands

#设定变量判断是否挂载和挂载盘的容量
mount = commands.getoutput("mount | grep ‘:.*nfs‘|wc -l")
size = commands.getoutput("df -h | grep share | awk ‘{print $5}‘ | cut -d ‘%‘ -f 1")

#建立发邮件的文本文件
def Createlist():
    if os.path.exists(‘/root/chenscript/alarm.txt‘) == True:
        os.system("python /root/chenscript/weixin_sharealarm.py")
        print ("微信告警已经发送!")
        os.system("cd /root/chenscript; echo ‘share盘容量大于80%,现在将调出容量排名前十位的文件
夹名字及对应的容量,请各位处理一下不需要的文件!‘ >>alarm.txt")
        os.system("cd /share ;du -s * --exclude=‘yunwei‘ --exclude=‘General_LeChange_Chn*‘ --exclude=‘Lecheng_Open*‘ |sort -nr |head >>/root/chenscript/alarm.txt")
        os.system("cd /share ;du -s * --exclude=‘yunwei‘ --exclude=‘General_LeChange_Chn*‘ --exclude=‘Lecheng_Open*‘ |sort -nr |head|awk \‘{print $2\"@dahuatech.com\"}\‘  >>/root/chenscript/list.txt")
        os.system("echo ‘\n‘ >> /root/chenscript/alarm.txt")

    if os.path.exists(‘/root/chenscript/alarm.txt‘) == False:
        os.system("cd /root/chenscript;touch alarm.txt")
        
def Sendmail():
        fp = open(‘/root/chenscript/alarm.txt‘, ‘r‘)
        content = fp.read()

        AutoMail.send_mail(‘share挂载盘容量大于80%!请各位整理自己对应的文件夹!‘, content)
        os.system("cd /root/chenscript/;rm -f list.txt;echo ‘[email protected]‘>list.txt")

#将邮件的文件刷新
def Dellist():
        os.system("cd /root/chenscript/;rm -f alarm.txt;touch alarm.txt")

if mount == ‘1‘ and size >= ‘80‘:
        print ("挂载盘存在!")
        print ("share盘容量大于80%...")
        Createlist()
        Sendmail()
        Dellist()
elif mount == ‘1‘ and size < ‘80‘:
        print ("挂载盘存在!")
        print ("share盘容量正常...")
else:
        print ("挂载盘不存在,现在重新挂载...")
        os.system("mount -t nfs -o acl,rw,intr,soft,nolock,rsize=8192,wsize=8192 10.160.43.172:/share /share ")
#!/usr/bin/env python
#coding=utf-8
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

mailto_list=[]    #这里为空list,会从list.txt里一行一行的当做元素添加进来
with open(‘/root/chenscript/list.txt‘,‘r‘) as f:
    f=f.readlines()
for i in f:
        i=i.strip(‘\n‘)
        mailto_list.append(i)
mail_host="这里填写邮箱主机"
mail_user="这里填写发送人的邮箱地址"
mail_pass="发送人的邮箱密码"
mail_postfix="dahuatech.com"
mail_sender="与mail_host内容相同"
def send_mail(sub, content):
    me=mail_sender
    msg = MIMEMultipart()
    msg[‘Subject‘] = sub
    msg[‘From‘] = me
    msg[‘To‘] = ";".join(mailto_list)
    content1 = MIMEText(str(content), ‘plain‘, ‘utf-8‘)
    msg.attach(content1)
    try:
        s = smtplib.SMTP()
        s.connect(mail_host)
        s.login(mail_user,mail_pass)
        s.sendmail(me, mailto_list, msg.as_string())
        print(‘发送成功!\n‘)
        s.close()
    except Exception as e: print(str(e))


执行的效果如下:

技术分享


隐藏的知识点!

1)du -s 是按照字节来统计,“--exclude=‘yunwei‘”是在排序的时候忽略掉yunwei这个文件夹,容后再用sort -nr|head是得到从大到小前10名,如果得到后10名就是sort -nr|tail;

2)如果使用的是import commands,那么commands.getoutput得到的是字符串

3)用“mount | grep ‘:.*nfs‘”来判断挂载盘是否存在是一个很简单的方式,如果挂了多个,就用ip in的方式来进一步判断;

4)要一行一行的读取文件,就readline;

5)python按行读取文件,去掉换行符"\n"的方法:           

for line in file.readlines():
    line=line.strip(‘\n‘)


本文出自 “生活就是等待戈多” 博客,请务必保留此出处http://chenx1242.blog.51cto.com/10430133/1965358

以上是关于一个监控挂载盘的python脚本的主要内容,如果未能解决你的问题,请参考以下文章

常用python日期日志获取内容循环的代码片段

Android获取挂载U盘的属性

关于Alist挂载网盘的问题?

说出挂载光盘U盘的基本方法,以及在linux中如何制作ISO镜像文件

最小LINUX系统下U盘的挂载及卸载

修改mdev的配置以支持U盘的自动挂载