一个监控挂载盘的python脚本

简介:

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/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  Createalarm():
     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 % ,现在将调出容量排名前十位的文件
夹名字及对应的容量,请各位处理一下不需要的文件!' > / root / chenscript / alarm.txt")
         os.system( "cd /挂载盘名称 ;du -s * --exclude='不想要计算在内的文件夹' --exclude='不想要计算在内的文件夹' --exclude='不想要计算在内的文件夹'|sort -nr |head >>/root/chenscript/alarm.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)
 
#将邮件的文件刷新
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 " )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/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里一行一行的当做元素添加进来
 
#生成list.txt
if  os.path.exists( '/root/chenscript/list.txt' = =  True :
         os.system( "cd /挂载盘名称;du -s * --exclude='不想要计算在内的文件夹' --exclude='不想要计算在内的文件夹' --exclude='不想要计算在内的文件夹'|sort -nr |head|awk \'{print $2\"@dahuatech.com\"}\'  >>/root/chenscript/list.txt" )
if  os.path.exists( '/root/chenscript/list.txt' = =  False :
         os.system( "cd /root/chenscript/;rm -f list.txt;echo '本人的邮箱地址'>list.txt" )
 
with  open ( '/root/chenscript/list.txt' , 'r' ) as f:
     f = f.readlines()
for  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 :
         =  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))
 
os.system( "cd /root/chenscript/;rm -f list.txt;echo '我本人的邮件地址'>list.txt" )


执行的效果如下:


wKiom1m6i9azyByDAABqTWMs_tc175.png



隐藏的知识点!

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)python要一行一行的读取文件,就readline;

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

1
2
for  line  in  file .readlines():
     line = line.strip( '\n' )

6)import Automail的时候,就已经把Automail.py这个脚本固定住了,这时候mailto_list已经不能变化了,所以要把添加list.txt放到这个脚本里。


wKioL1m7fySQp5JcAABIF2LnuDk553.png

发了邮件,连吼带骂一顿,终于把share盘容量下降到了69这样一个美妙的数字...


最后的最后,如果您觉得本文对您升职加薪有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多的博文!

wKioL1l16m3BMYDKAACPHEqd55Q687.jpg

 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1965358



相关文章
|
20天前
|
Linux Shell Python
Linux执行Python脚本
Linux执行Python脚本
26 1
|
9天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
【4月更文挑战第9天】本文探讨了Python在自动化测试中的应用,强调其作为热门选择的原因。Python拥有丰富的测试框架(如unittest、pytest、nose)以支持自动化测试,简化测试用例的编写与维护。示例展示了使用unittest进行单元测试的基本步骤。此外,Python还适用于集成测试、系统测试等,提供模拟外部系统行为的工具。在脚本编写实践中,Python的灵活语法和强大库(如os、shutil、sqlite3、json)助力执行复杂测试任务。同时,Python支持并发、分布式执行及与Jenkins、Travis CI等持续集成工具的集成,提升测试效率和质量。
|
16天前
|
存储 监控 异构计算
【Python】GPU内存监控脚本
【Python】GPU内存监控脚本
|
16天前
|
Ubuntu Unix Linux
【Linux/Ubuntu】Linux/Ubuntu运行python脚本
【Linux/Ubuntu】Linux/Ubuntu运行python脚本
|
24天前
|
XML Shell Linux
性能工具之 JMeter 使用 Python 脚本快速执行
性能工具之 JMeter 使用 Python 脚本快速执行
40 1
性能工具之 JMeter 使用 Python 脚本快速执行
|
1月前
|
数据采集 测试技术 Python
Python自动化脚本的魅力与实践
Python自动化脚本的魅力与实践
48 0
|
1月前
|
数据安全/隐私保护 Python
使用Python脚本实现图片合成PDF功能
使用Python脚本实现图片合成PDF功能
26 0
|
1月前
|
安全 数据安全/隐私保护 开发者
如何使用Pyarmor保护你的Python脚本
如何使用Pyarmor保护你的Python脚本
42 0
|
1月前
|
数据处理 Python
Python自动化脚本
Python自动化脚本
24 0

热门文章

最新文章