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 ...
随机推荐
- List泛型的应用
在我看一个源程序的时候看到这个例子使用了IList<T>返回类型,因为上午刚刚总结过List<T>的详细用法,突然出现了IList<T>,感觉很奇怪,于是上网搜集了 ...
- jq页面加载问题
Window.onload=function(){ //页面加载,不能同时编写多个,最后面的会覆盖前面的 } $(document).ready(function(){ //页面加载,能同时编写多 ...
- easyUi的一些常用方法
目录: 1.获取表格的pageNumber和pageSize 2.获取/设置下拉列表的选中值 3.下拉列表的输入框的禁用 1.获取表格的pageNumber和pageSize var pageNumb ...
- 在 S5PV210 的 开发板上 点亮 一个 LED 灯
参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先 准备一个 安装好 Linux 的 开发板 使用 xshell 工具 连接 开发板 ,winscp 工具 连接 开发板 , 准 ...
- centos6.4 安装code::blocks
今天下午闲着没事尝试在自己的PC中的CentOS上装一个Code::Blocks,因为是Linux菜鸟折腾了一下午才基本算搞定但依然有疑惑: 在网上各种谷哥度娘最后才发现还是官方的文档最靠谱:看这里. ...
- OpenID Connect Core 1.0(六)使用隐式验证流
3.2 使用隐式验证流(Authentication using the Implicit Flow) 本节描述如何使用隐式流程执行验证.使用隐式流程时,所有令牌从授权终结点返回:不使用令牌终结点返回 ...
- Oracle 数据库备份和恢复配置
可能的失败及其解决方法 失败类型 我们坑你遇到的失败或错误分为两大类:物理和逻辑.物理错误一般是硬件错误或使用数据库的应用程序中的软件错误,而逻辑错误一般在终端用户级别(数据库用户和管理员). 按从轻 ...
- 修改系统UITableViewCell的ImageView大小
代码如下: CGSize itemSize = CGSizeMake(, ); UIGraphicsBeginImageContext(itemSize); CGRect imageRect = CG ...
- Delphi高效定制格式的FormatDateTime
本人根据歼10博主的此博文的思路进行改进,目的是高效的实现FormatDateTime('YYYY-MM-DD HH:NN:SS.ZZZ', Now); 在DelphiXE3 32Bits环境测试10 ...
- Home Assistant系列 -- 设置界面语言与地理位置
Home Assistant 安装的时候会自动根据你的系统语言设置默认语言,安装完成以后也可以根据需要自己设置选择语言.启动 Home Assistant ,浏览器打开web 界面,点击左上角的用户图 ...