老男孩教育每日一题-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


相关文章
|
2月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
419 9
|
2月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
308 2
|
3月前
|
JSON API 开发者
深度分析阿里妈妈API接口,用Python脚本实现
阿里妈妈是阿里巴巴旗下营销平台,提供淘宝联盟、直通车等服务,支持推广位管理、商品查询等API功能。本文详解其API调用方法,重点实现商品推广信息(佣金、优惠券)获取,并提供Python实现方案。
|
3月前
|
JSON API 数据安全/隐私保护
深度分析虾皮城API接口,用Python脚本实现
虾皮开放平台提供丰富的API接口,支持商品管理、订单处理及促销信息查询等功能。本文详解API认证机制与调用方法,基于Python实现商品价格及到手价获取方案,适用于电商数据分析与运营。
|
2月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
3月前
|
API 数据安全/隐私保护 开发者
深度分析苏宁API接口,用Python脚本实现
深度分析苏宁API接口,用Python脚本实现
|
API Python
Python邮箱API发送邮件的方法和步骤
使用Python发送邮件涉及导入smtplib和email模块,设置发件人、收件人、主题和内容,然后连接SMTP服务器(如示例中的smtp.example.com)并使用SMTP方法发送。完整代码示例包括异常处理,确保邮件发送成功或提供错误信息。通过这种方式,可以实现Python的自动化邮件发送功能。
|
数据安全/隐私保护 Python
Python 技术篇-连接qq邮箱服务器,调用qq邮箱发送邮件实战演示,qq邮箱授权码开通方法
Python 技术篇-连接qq邮箱服务器,调用qq邮箱发送邮件实战演示,qq邮箱授权码开通方法
1108 0
Python 技术篇-连接qq邮箱服务器,调用qq邮箱发送邮件实战演示,qq邮箱授权码开通方法
|
Web App开发 Python
python发送各类邮件的主要方法
python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点。     一、相关模块介绍     发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍:    1、smtplib模块       smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])    SMTP类构造函数,表示与SMTP服务器之间的连接,通过这个连接可以向smtp服务器发送指令,执行相关操作(如:登陆、发送邮件)。
1095 0