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 ...
随机推荐
- linq的左连接右连接内连接用法
1.左连接: var LeftJoin = from e in ListOfEmployees join d in ListOfDepartment on e.DeptID equals d.ID i ...
- HDU 3367 (伪森林,克鲁斯卡尔)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=3367 Pseudoforest Time Limit: 10000/5000 MS (Java/Oth ...
- ovs加dpdk出现EAL No free hugepages reported in hugepages-1048576kB
问题 打开ovs的日志: cat /etc/local/var/log/openvswitch/ovs-vswichd.log 其中一条显示: 2018-07-30T02:12:05.443Z|000 ...
- linux crontab 计划任务设置 (简结)
命令: crontab -l 查看当前运行的计划任务 crontab -e 编辑当前运行计划任务 修改或添加 VIM编辑器用法:按 i 键进入编辑文本状态, esc 结束编辑状态 , :wq ...
- Javascript--将十进制数字转换成罗马数字显示
下午在FCC(FreeCodeCamp)中文网上做到一道练习题:将给定的数字转换成罗马数字.折磨了一个多小时,终于能把基本功能给实现了.过程如下: 关于罗马数字 罗马数字的详细介绍可见百度,或者罗马数 ...
- PHP中实现中文字串截取无乱码的方法
[本文转自独占神林的日志:链接:http://yuninglovekefan.blog.sohu.com/176021361.html] 在PHP中,substr()函数截取带有中文字符串的话,可能会 ...
- Java实例 Part6:Java中的克隆
目录 Part6:Java中的克隆 Example01:Java对象的假克隆 Example02:Java对象的浅克隆 Example03:Java对象的深克隆 Example04:序列化与对象克隆 ...
- Jquery 批量操作标签属性
$("[id*='Custom']").removeAttr("disabled")
- U盘直接读写(今天用到了)
#ifndef INVALID_SET_FILE_POINTER #define INVALID_SET_FILE_POINTER (DWORD)-1 #endif #define FILE_BEGI ...
- 08-可滚动Widget
可滚动Widget ViewPort视口 在Flutter中,术语ViewPort(视口),如无特别说明,则是指一个Widget的实际显示区域.例如,一个ListView的显示区域高度是800像素,虽 ...