shell实战练习脚本

柳三千

文章最后更新时间:2022年11月16日已超过744天没有更新。

一、服务器环境

centos7

支持mail邮箱发送

提示:如果想直接使用,直接跳到最后复制脚本内容,修改下邮箱即可使用


二、mail邮箱配置

#安装mail邮箱
yum install mailx -y

[root@WEB ~]# vim /etc/mail.rc
set bsdcompat
set from=123456@qq.com  //邮箱地址,
set smtp=smtp.exmail.qq.com
set smtp-auth-user=123456@qq.com //邮箱 账户
set smtp-auth-password=123 //邮箱密码
set smtp-auth=login


三、监控CPU

crontab定时任务的环境变量不支持top命令,需要top -b输出到一个文件,然后赋值给cpu变量

#!/bin/bash
. /etc/profile
. ~/.bash_profile
#CPU监测
tmp=$(/usr/bin/top -bn 1 | grep %Cpu | cut -d , -f 4 | awk '{print $1}' | cut -d . -f 1 > /root/tmp)
cpu=$(cat /root/tmp)
if [ $cpu -lt 15 ];then
cputmp=$((100-$cpu))
echo "CPU使用率高达$cputmp%,请及时处理!" | mail -s "CPU使用告急!" 123456@qq.com
fi


四、内存监测

注意: shell不支持浮点比较或者计算,需要换个思路处理

1、先求出浮点数据之后,然后使用awk把浮点数转换成两位小数,储存到临时变量

2、然后把浮点数乘以100转换成整数,然后进行IF判断

#内存监测
totalmem=$(free -m | grep Mem | awk '{print $2}')
usemem=$(free -m | grep Mem | awk '{print $3}')
mtmp=$(echo "$totalmem $usemem" | awk '{printf ("%.2f\n",$2/$1)}')
mem=$(echo "$mtmp" | awk '{print $1*100}')
if [ $mem -gt 85 ];then
echo "内存使用率高达$mem%,请及时处理!" | mail -s "内存使用告急!" 123456@qq.com
fi


五、硬盘监测

#硬盘监测
disk=$(df -h / | awk '{print $5}' | cut -d % -f 1 | grep ^[0-9])
if [ $disk -gt 85 ];then
echo "硬盘使用率高达$disk%,请及时处理!" | mail -s "硬盘使用告急!" 123456@qq.com
fi


六、系统负载监测

系统负载数据也使用到浮点数,还是使用乘以100转换成整数运算的思路

#系统负载监测
average=$(uptime | awk '{print $12}')
cpucroe=$(cat /proc/cpuinfo | grep processor | wc -l)
atmp=$(echo $average | awk '{print $1 * 100}')
ctmp=$(echo $cpucroe | awk '{print $1 * 100}')
if [ $atmp -gt $ctmp ];then
echo "近15分钟系统负载高达$average请及时处理!" | mail -s "系统负载过高!" 123456@qq.com
fi


七、加入定时任务

*/15 * * * * ./etc/profile;/bin/bash /root/脚本名字


八、最后脚本总内容

#CPU监测
cpu=$(top -n 1 | grep %Cpu | cut -d , -f 4 | awk '{print $2}' | cut -d . -f 1)
if [ $cpu -lt 15 ];then
cputmp=$((100-$cpu))
echo "CPU使用率高达$cputmp%,请及时处理!" | mail -s "CPU使用告急!" 123456@qq.com
fi
#内存监测
totalmem=$(free -m | grep Mem | awk '{print $2}')
usemem=$(free -m | grep Mem | awk '{print $3}')
mtmp=$(echo "$totalmem $usemem" | awk '{printf ("%.2f\n",$2/$1)}')
mem=$(echo "$mtmp" | awk '{print $1*100}')
if [ $mem -gt 85 ];then
echo "内存使用率高达$mem%,请及时处理!" | mail -s "内存使用告急!" 123456@qq.com
fi
#硬盘监测
disk=$(df -h / | awk '{print $5}' | cut -d % -f 1 | grep ^[0-9])
if [ $disk -gt 85 ];then
echo "硬盘使用率高达$disk%,请及时处理!" | mail -s "硬盘使用告急!" 123456@qq.com
fi
#系统负载监测
average=$(uptime | awk '{print $12}')
cpucroe=$(cat /proc/cpuinfo | grep processor | wc -l)
atmp=$(echo $average | awk '{print $1 * 100}')
ctmp=$(echo $cpucroe | awk '{print $1 * 100}')
if [ $atmp -gt $ctmp ];then
echo "近15分钟系统负载高达$average请及时处理!" | mail -s "系统负载过高!" 123456@qq.com
fi
echo "$(date +%F) $(date +%T)" >> /$HOME/sys.log
echo "空闲CPU:$cpu%" >> /$HOME/sys.log
echo "MEM:$mem%" >> /$HOME/sys.log
echo "DISK:$disk%" >> /$HOME/sys.log
echo "AVERAGE:$average" >> /$HOME/sys.log
文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码