linux系统CPU内存磁盘监控发送邮件脚本
#!/bin/bash
export PATH
export LANG=zh_CN.UTF-8
#
#
#top之后输入数字1,可以查看每颗CPU的情况.
#
#
#先配置好mailx邮箱账号密码:
#cat>/etc/mail.rc<<"EOF"
#set sendcharsets=iso-8859-1,utf-8
#set from=xxx@163.com
#set smtp=smtp.163.com
#set smtp-auth-user=xx@163.com
#set smtp-auth-password=xxx
#set smtp-auth=login
#EOF
#文件存放位置
#
#判断是否安装bc
ping -c 2 www.baidu.com || exit 5
[ `echo "1 > 2"|bc` ] || yum install bc -y
sleep 3
[ `rpm -qa|grep dos2unix` ] || yum install dos2unix -y
sleep 3
#
#
#时间
readonly times=$(date +%Y"/"%m"/"%d" "%k":"%M)
#服务器IP
readonly machine=$(ip add | grep inet|grep -v 'inet6\|127.0.0.1'|awk '{ print $2 }' | sed 's/\/.*$//')
readonly names=$(hostname)
#cpu个数
readonly cpuinfos=$(cat /proc/cpuinfo|grep processor|wc -l)
#在线用户数
readonly onlines='2'
#cpu负载阈值
readonly cpuload='80'
#判断用户在线数
userd=$(top -n 1|grep users|awk -F '[, ]+' '{print $6}')
whos=$(who)
if [ $userd > $onlines ];then
echo "$times $machine 当前在线用户数: $whos"
fi
#
#
function top_check(){
#服务器运行多久
runup=$(top -n 1|grep user|awk -F '[, ]+' '{print $5}')
#用户空间占用CPU百分比
cpuus=$(top -n 1|grep Cpu|awk -F "," '{print $1}'|awk -F " " '{print $2}')
#内核空间占用CPU百分比
cpusy=$(top -n 1|grep Cpu|awk -F "," '{print $2}'|awk -F " " '{print $2}')
#改变过优先级的进程占用CPU的百分比
cpuni=$(top -n 1|grep Cpu|awk -F "," '{print $3}'|awk -F " " '{print $2}')
#空闲CPU百分比
cpuid=$(top -n 1|grep Cpu|awk -F "," '{print $4}'|awk -F " " '{print $2}')
#I/O等待占用CPU的百分比
cpuwa=$(top -n 1|grep Cpu|awk -F "," '{print $5}'|awk -F " " '{print $2}')
#硬中断占用CPU的百分比
cpuhi=$(top -n 1|grep Cpu|awk -F "," '{print $6}'|awk -F " " '{print $2}')
#软中断占用CPU的百分比
cpusi=$(top -n 1|grep Cpu|awk -F "," '{print $7}'|awk -F " " '{print $2}')
#虚拟 CPU 等待实际 CPU 的时间的百分比
cpust=$(top -n 1|grep Cpu|awk -F "," '{print $8}'|awk -F " " '{print $2}')
}
function load_time(){
#一分钟负载
load1=$(top -n 1|grep user|awk -F '[, ]+' '{print $11}')
#五分钟负载
load5=$(top -n 1|grep user|awk -F '[, ]+' '{print $12}')
#十五分钟负载
load15=$(top -b -n 1|grep user|awk '{print $NF}')
}
function load_mem(){
#内存总容量
memtotal=$(($(top -n 1|grep buff/cache|awk -F '[, ]+' '{print $4}') / 1024))
#当前空闲内存
memfree=$(($(top -n 1|grep buff/cache|awk -F '[, ]+' '{print $7}') / 1024))
#当前已使用内存
memused=$(($(top -n 1|grep buff/cache|awk -F '[, ]+' '{print $10}') / 1024))
#内存buff/cache
membuff=$(($(top -n 1|grep buff/cache|awk -F '[, ]+' '{print $13}') / 1024))
#swap总容量
swaptotal=$(($(top -n 1|grep avail|awk -F '[, ]+' '{print $3}') / 1024))
#swap当前空闲
swapfree=$(($(top -n 1|grep avail|awk -F '[, ]+' '{print $6}') / 1024))
#swap当前已使用
swapused=$(($(top -n 1|grep avail|awk -F '[, ]+' '{print $9}') / 1024))
#swap内存avail Mem
swapavail=$(($(top -n 1|grep avail|awk -F '[, ]+' '{print $11}') / 1024))
}
function echo_run(){
echo "$times $machine 运行多久: $runup 分钟 "
}
function echo_cpu(){
echo "$times $machine 用户空间占用CPU百分比: $cpuus "
echo "$times $machine 内核空间占用CPU百分比: $cpusy "
echo "$times $machine 改变过优先级的进程占用CPU的百分比: $cpuni "
echo "$times $machine 空闲CPU百分比: $cpuid "
echo "$times $machine I/O等待占用CPU的百分比: $cpuwa"
echo "$times $machine 硬中断占用CPU的百分比: $cpuhi "
echo "$times $machine 软中断占用CPU的百分比: $cpusi "
echo "$times $machine 虚拟 CPU 等待实际 CPU 的时间的百分比: $cpust "
}
function echo_mem(){
echo "$times $machine 内存总容量: $memtotal M "
echo "$times $machine 空闲内存: $memfree M "
echo "$times $machine 已使用内存: $memused M "
echo "$times $machine 内存buff/cache: $membuff M "
echo "$times $machine swap总共: $swaptotal M "
echo "$times $machine swap空闲: $swaptotal M "
echo "$times $machine swap已使用: $swapused M "
echo "$times $machine swap内存avail Mem: $swapavail M "
}
function echo_load(){
echo "$times $machine 1分钟CPU负载: $load1 "
echo "$times $machine 5分钟CPU负载: $load5 "
echo "$times $machine 15分钟CPU负载: $load15 "
}
#调用函数
top_check
load_time
load_mem
#
if [ `echo "$load1 > $cpuinfos"|bc` -eq 1 ];then
readonly runlog="/tmp/runs.log"
echo_run >$runlog
readonly loadlog="/tmp/load.log"
echo_load >$loadlog
readonly cpulog="/tmp/cpus.log"
echo_cpu >$cpulog
readonly memlog="/tmp/mems.log"
echo_mem >$memlog
#发送邮件
dos2unix -k $runlog
dos2unix -k $loadlog
dos2unix -k $cpulog
dos2unix -k $memlog
mailx -s "服务器$names $machine" lumia98@vip.qq.com < $runlog
mailx -s "服务器$names $machine" lumia98@vip.qq.com < $loadlog
mailx -s "服务器$names $machine" lumia98@vip.qq.com < $cpulog
mailx -s "服务器$names $machine" lumia98@vip.qq.com < $memlog
fi
#判断I/O wa是否过高
if [ `echo "$cpuwa > 60"|bc` -eq 1 ];then
readonly ioslogs="/tmp/wa.log"
iostat -cdx 3 > $ioslogs
dos2unix -k $ioslogs
mailx -s "服务器$names $machine的负载wa%" lumia98@vip.qq.com < $ioslogs
fi
#判断磁盘空间不足
disks=$(df | grep /dev|grep -v "shm\|boot\|devtmpfs"|awk '{print $5}'|sed 's/\%.*$//')
for x in $disks
do
if [ $x -gt 70 ]; then
disklog="/tmp/disk.log"
df -h >$disklog
dos2unix -k $disklog
mailx -s "服务器$names $machine" lumia98@vip.qq.com < $disklog
fi
done
linux系统CPU内存磁盘监控发送邮件脚本的更多相关文章
- linux系统CPU,内存,磁盘,网络流量监控脚本
前序 1,#cat /proc/stat/ 信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2,#vmstat –s 或者#vmstat 虚拟内存统计 3, #cat ...
- Linux系统CPU的性能监控及调优
前言: 性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢.接口超时,服务器负载高.并发数低,数据库频繁死锁等.尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的 ...
- C/C++获取Linux系统CPU和内存及硬盘使用情况
需求分析: 不使用Top df free 等命令,利用C/C++获取Linux系统CPU和内存及硬盘使用情况 实现: //通过获取/proc/stat (CPU)和/proc/meminfo(内存 ...
- Java获取Linux系统cpu使用率
原文:http://www.open-open.com/code/view/1426152165201 import java.io.BufferedReader; import java.io.Fi ...
- Linux系统cpu 100%修复案例
Linux系统cpu 100%修复案例 阿里云技术支持团队:完颜镇江 案例背景: Linux主机连续三天CPU% 处理思路: 1. 登录服务器查看/var/log/messages+/var/lo ...
- 极客时间-左耳听风-程序员攻略-Linux系统、内存和网络
程序员练级攻略:Linux系统.内存和网络 Linux 系统相关 Red Hat Enterprise Linux 文档 . Linux Insides ,GitHub 上的一个开源电子书,其中讲述了 ...
- linux系统下重启tomcat的shell脚本
linux系统下重启tomcat的shell脚本: #!/bin/shtomcat_home=/opt/apache-tomcat- #找到tomcat进程的id并kill掉 ps -ef |grep ...
- Linux系统格式化新磁盘并挂载分区
Linux系统格式化新磁盘并挂载分区 在虚拟机的设置界面中,我们可以选择添加硬盘 添加好硬盘后,我们输入命令fdisk -l 看到有一个未经分区的硬盘 Fdisk命令编辑这个硬盘 输入n创建分区,p选 ...
- Linux系统CPU相关信息查询
Linux系统CPU相关信息查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.lscpu常用参数介绍 1>.查看帮助信息 [root@node105 ~]# lscpu ...
随机推荐
- SpringBoot实战(三)之使用RestFul Web服务
一.导入maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
- 奇妙的CSS3—导航栏下划线跟随效果
先来看一下效果: 1.基本效果就是这样的 ,鼠标悬停,下划线划入.鼠标离开,下划线划出 2.下划线的划入是有方向的,从左侧划入悬停,下划线由左向右伸长.从右侧划入,下划线由又往左伸长 实现思路 1.导 ...
- 【HTML-进阶-如何实现父级块级元素宽度自适应子元素宽度】
背景 块级元素宽度默认值为100%,而不是auto;因此其宽度不会根据子元素内容动态适应. 如何实现父级元素宽度动态适应其子元素. 方法一 display:inline; 给块级元素设置inline- ...
- JAVA语言编程思维入门
Java语言是一门强数据类型语言,也就是所有的数据有自己的数据类型,不能搞混淆.比如整数int 字符串String 不能用int a="字符串123";这样写是错的,因为数据类型不 ...
- org.yaml.snakeyaml.parser.ParserException: while parsing a block mapping
org.yaml.snakeyaml.parser.ParserException: while parsing a block mapping 原因:yml文件格式错误,此文件要求严格要求格式 如节 ...
- python_frm组件
一.URL添加 from django.contrib import admin from django.urls import path,re_path from app01 import view ...
- 页面缓存优化系列一(expires,cache-control 解读)
参考文章:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control http://caibaojian.com/s ...
- 偏前端-纯css,手写轮播-(焦点切换 和 自动轮播 只可选择一种,两者不可共存)
现在我们一般都是在网上找个轮播插件,各种功能应有尽有,是吧!!~大家似乎已经生疏了手写是什么感觉.万一哪天想不起来,人家要手写,就尴尬了!~~跟我一起复习一下吧 不多说:效果图看一下: 高度不能是固定 ...
- A1033
找出最小开销. 思路: 出发点的加油站编号设为0,终点的加油站编号设为n,其他加油站编号按距离依次排序. 如果0号加油站的距离!=0,则无法出发,行驶距离为0. 从起点开始,寻找规则为,如果存在油价小 ...
- Linux入门进阶第五天——用户管理(帐号管理 )上
一.帐号与群组 关于使用者帐号: 用户的ID与帐号信息所在位置是 /etc/passwd,而管理密码的数据则是在 /etc/shadow 每个登陆的使用者至少都会取得两个 ID , 一个是使用者 ID ...