老男孩教育每日一题-2017-04-17:使用Shell或Python写一个脚本,CPU使用率超过80%或硬盘超过85%邮件报警

简介:

老男孩教育每日一题-2017-04-17:

使用Shell或Python写一个脚本,CPU使用率超过80%或硬盘超过85%邮件报警。

  • Shell

知识点1

CPU监控:top -n 1 查看1次就退出

1
Cpu(s): 0.3%us,  0.3%sy,  0.0%ni, 99.3% id ,  0.0%wa, 0.0%hi,  0.0%si,  0.0%st

 99.3%id  是未使用的CPU,剩余的都是使用的。

获取使用率

1
top  -n 1| awk  -F  '[, %]+'  'NR==3 {print 100-$11}'

知识点2

磁盘监控先监控/

1
df  -h| awk  -F  '[ %]+'   '/\/$/{print $5}'

知识点3:使用bc进行含有小数的大小判断

1
2
3
4
5
6
[root@oldboy ~] # echo "0.1>0.01"|bc
1
[root@oldboy ~] # echo "0.1>0.2"|bc
0
[root@oldboy ~] # echo "5.6>10.3"|bc
0

具体步骤:

1. 配置/etc/mail.rc支持发邮件

1
http: //oldboy .blog.51cto.com /2561410/1706911

2. 脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@oldboy scripts] # cat check.sh
#!/bin/bash
LANG=en_US.UTF-8
cpuUsed=` top  -n 1| awk  -F  '[, %]+'  'NR==3 {print100-$11}' `
diskUsed=$( df  -h| awk  -F  '[ %]+'   '/\/$/{print $5}' )
logFile= /tmp/jiankong .log
  
function  Sendmail(){
     mail -s "监控报警"  user@oldboyedu.com <$logFile
}
  
function  check(){
     if  [ ` echo "$cpuUsed>80" | bc ` - eq  1 -o $diskUsed - ge  85 ]; then
        echo "CPU使用率:${cpuUsed}%,磁盘使用率:${diskUsed}%" >$logFile
       Sendmail
     fi
}
  
function  main(){
     check
}
 
main

 

3. 加入定时任务,每5分钟执行一次。

 

                           

wKioL1j0iluQc7qwAADXQEDkpAs974.png


  • Python3

声明:已在python3测试,需要安装pip3 install psutil

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
[root@linux-node1 ~] # cat check.py 
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import  psutil    # python获取系统信息模块,需要额外安装
import  smtplib   # 发送邮件
from email.mime.text  import  MIMEText   # 构造纯文本邮件
from email.utils  import  formataddr  # 格式化邮件地址
 
cpuUsed=psutil.cpu_percent(interval=1)
diskUsed=psutil.disk_usage( '/' ).percent
 
def structural_mail(text, recipient):
     msg = MIMEText(text,  'plain' 'utf-8' )
     msg[ 'From' ] = formataddr([ "张耀" 'user@oldboyedu.com' ])   # 发件人
     msg[ 'To' ] = formataddr([recipient, recipient])   # recipient收件人
     msg[ 'Subject' ] =  "监控报警"   # 主题
     return  msg
 
 
def send_mail(text, recipient):
     from_addr =  '发送邮箱账号'
     password =  '密码'
     smtp_server =  'smtp.exmail.qq.com'
     smtp_port = 25
     to_addr = []   # 可以一次发给多个人,因此传入一个列表
     to_addr.append(recipient)
 
     msg = structural_mail(text, recipient)
 
     server = smtplib.SMTP(smtp_server, smtp_port)
     server.login(from_addr, password) 
     server.sendmail(from_addr, to_addr, msg.as_string())
 
 
def check():
     if  cpuUsed <= 80 or diskUsed >= 85:
        send_mail( 'CPU使用率:{}%,磁盘使用率:{}%' . format (cpuUsed, diskUsed), '12345678@qq.com' )
 
if  __name__ ==  '__main__' :
     check()

 

wKiom1j0ilzSL2A1AACHewlNqLM092.png


今天是老男孩教育每日一题陪伴大家的第29天。

往期题目索引

http://lidao.blog.51cto.com/3388056/1914205


本文转自 李导 51CTO博客,原文链接:http://blog.51cto.com/lidao/1916530


相关文章
|
1月前
|
并行计算 数据处理 Python
Python并发编程迷雾:IO密集型为何偏爱异步?CPU密集型又该如何应对?
在Python的并发编程世界中,没有万能的解决方案,只有最适合特定场景的方法。希望本文能够为你拨开迷雾,找到那条通往高效并发编程的光明大道。
42 2
|
2月前
|
开发框架 并行计算 算法
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
46 4
|
1月前
|
监控 并行计算 数据处理
构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
在Python编程的征途中,面对日益增长的性能需求,如何构建高效的应用成为了每位开发者必须面对的课题。并发与异步编程作为提升程序性能的两大法宝,在处理IO密集型与CPU密集型任务时展现出了巨大的潜力。今天,我们将深入探讨这些技术的最佳实践,助你打造高效Python应用。
38 0
|
3月前
|
SQL 监控 关系型数据库
MySQL优化: CPU高 处理脚本 pt-kill脚本
MySQL优化: CPU高 处理脚本 pt-kill脚本
|
1月前
|
监控 Shell 数据处理
Python执行Shell并获取结果的全面指南
Python执行Shell并获取结果的全面指南
181 1
|
1月前
|
开发框架 并行计算 .NET
脑洞大开!Python并发与异步编程的哲学思考:IO密集型与CPU密集型任务的智慧选择!
脑洞大开!Python并发与异步编程的哲学思考:IO密集型与CPU密集型任务的智慧选择!
29 1
|
2月前
|
开发框架 并行计算 .NET
燃烧吧,Python!异步编程如何点燃IO密集型任务,让CPU密集型任务也加速狂奔?
燃烧吧,Python!异步编程如何点燃IO密集型任务,让CPU密集型任务也加速狂奔?
23 2
|
2月前
|
算法 Java 程序员
解锁Python高效之道:并发与异步在IO与CPU密集型任务中的精准打击策略!
在数据驱动时代,高效处理大规模数据和高并发请求至关重要。Python凭借其优雅的语法和强大的库支持,成为开发者首选。本文将介绍Python中的并发与异步编程,涵盖并发与异步的基本概念、IO密集型任务的并发策略、CPU密集型任务的并发策略以及异步IO的应用。通过具体示例,展示如何使用`concurrent.futures`、`asyncio`和`multiprocessing`等库提升程序性能,帮助开发者构建高效、可扩展的应用程序。
113 0
|
2月前
|
UED 开发者 Python
Python并发编程新纪元:异步编程如何重塑IO与CPU密集型任务的处理方式?
在Python编程中,异步编程作为一种非阻塞模式,通过允许程序在等待IO操作时继续执行其他任务,提高了程序的响应性和吞吐量。与传统同步编程相比,它减少了线程等待时间,尤其在处理IO密集型任务时表现出色,如使用`asyncio`库进行异步HTTP请求。尽管对CPU密集型任务的直接提升有限,但结合多进程或多线程可间接提高效率。异步编程虽强大,但也带来了代码复杂度增加和调试难度提升等挑战,需要开发者掌握最佳实践来克服这些问题。随着其技术的成熟,异步编程正在逐步改变我们处理IO与CPU密集型任务的方式,成为提升性能和优化用户体验的重要工具。
23 0
|
3月前
|
Shell 数据处理 C++
【震撼揭秘】Python正则VS Shell正则:一场跨越编程边界的史诗级对决!你绝不能错过的精彩较量,带你领略文本处理的极致魅力!
【8月更文挑战第19天】正则表达式是文本处理的强大工具,在Python与Shell中有广泛应用。两者虽语法各异,但仍共享许多基本元素,如`.`、`*`及`[]`等。Python通过`re`模块支持丰富的功能,如非捕获组及命名捕获组;而Shell则依赖`grep`、`sed`和`awk`等命令实现类似效果。尽管Python提供了更高级的特性和函数,Shell在处理文本文件方面仍有其独特优势。选择合适工具需根据具体需求和个人偏好决定。
38 1
下一篇
无影云桌面