一个监控挂载盘的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脚本的主要内容,如果未能解决你的问题,请参考以下文章