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

本文转自  一招拜师  51CTO博客,原文链接:http://blog.51cto.com/sadoc/1943283

相关文章
|
8天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
124 78
|
8天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
61 13
|
9天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
28 0
|
25天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
64 7
|
1月前
|
弹性计算 Kubernetes Perl
k8s 设置pod 的cpu 和内存
在 Kubernetes (k8s) 中,设置 Pod 的 CPU 和内存资源限制和请求是非常重要的,因为这有助于确保集群资源的合理分配和有效利用。你可以通过定义 Pod 的 `resources` 字段来设置这些限制。 以下是一个示例 YAML 文件,展示了如何为一个 Pod 设置 CPU 和内存资源请求(requests)和限制(limits): ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image:
227 1
|
1月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
824 2
|
3月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
213 5
|
2月前
|
C# 开发工具 Windows
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
72 0
|
3月前
|
Prometheus Kubernetes 监控
使用kubectl快速查看各个节点的CPU和内存占用量
在Kubernetes集群中,安装metrics-server,并使用kubectl快速查看集群中各个节点的资源使用情况。
269 0
|
4月前
|
存储 监控 Docker
如何限制docker使用的cpu,内存,存储
如何限制docker使用的cpu,内存,存储