通过shell编写内存监视的脚本来介绍一些基本shell脚本操作

本文介绍了如何使用bash脚本结合awk、grep和bc工具实时监控系统内存使用情况,通过设置阈值判断内存使用是否超过警戒线,并将结果记录到日志中,提供了一种简易的系统性能监控解决方案。
摘要由CSDN通过智能技术生成

目录

知识概览

总体脚本编写

date

awk

grep

bc


知识概览

总体脚本编写


#!/bin/bash

#定义日志的文件名和日期
cdate=$(date +%Y%m%d%H%M%S)
logfile="/tmp/memlog_{$0}.log"

#拿到ip
ip_addr=$(ip add|grep "ens33$"|awk '{print $2}')

#总内存和使用的内存
mem_all=$(free -m|head -2|tail -1|awk '{print $2}')
mem_used=$(free -m|head -2|tail -1|awk '{print $3}')

#计算使用率
percent=$(echo "scale=2;$mem_used/$mem_all*100"|bc)

#定义一个警告的阈值,然后进行比较
thereshold=80
flag=$(echo "$percent > $thereshold"|bc)
if (( $flag == 1 ));then
	echo "$cdate $ip_addr Total:{$mem_all}M Mem used:${percent}%" >>$logfile
else
	echo "内存的使用率在合理范围内"
fi

date

这里写一个日志,所以获取具体时间来做日志命名,非常需要注意的是date与+之间一定要打一个空格,没有空格的话就会报错:

#定义日志的文件名和日期
cdate=$(date +%Y%m%d%H%M%S)
logfile="/tmp/memlog_{$0}.log"


awk

(head和tail在前面的文章中已经讲过,所以这里不做过多的赘述,两者通过管道符号,可以获得你想要的任何一行)

#总内存和使用的内存
mem_all=$(free -m|head -2|tail -1|awk '{print $2}')
mem_used=$(free -m|head -2|tail -1|awk '{print $3}')

free -m:这个可以获取内存的信息

 total--->总内存大小
used--->使用了的内存大小
free--->没有使用的
shared---->共享内存,其实也是使用的,有的程序可以共享内存空间
buff/cache--->buff是指缓存,是属于内存空间的,临时存放数据的地方。cache是读取磁盘里的数据到内存里的临时存放数据的地方
available--->可用的内存空间,给下一个程序可以使用的内存空间,一个理论值。

获得了指定行之后,使用awk可以做文本提取,这里每个空格代表一个位置变量,通过$2,$3可以获得对应的数字。

grep

#拿到ip
ip_addr=$(ip add|grep "ens33$"|awk '{print $2}')

ip add命令可以获取机器ip:

grep作为文本抓取工具,通过" "引起要找的关键字,可以找到对应的行数,这里找到ens33结尾的行,这一行正好是ip所在行,由此获得ip地址。

bc

bc是linux自带的运算器。

[root@localhost ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
4*4
16
quit

输入quit就可以退出。
可以用bc进行小数运算:

[root@localhost ~]# echo 4.6+4.6|bc
9.2

保留小数的运算,scale表示精确到小数点后两位:

[root@localhost ~]# echo "scale=2;56/5"|bc
11.20

所以下面这一段代码的意义是:使用bc工具算出使用率,但是小数在bc中的0会被隐藏,所以乘以100,并且保留两位小数。

#计算使用率
percent=$(echo "scale=2;$mem_used/$mem_all*100"|bc)

最后一段:这里使用bc做比较判断是否超出我们定的阈值80,超出就把它记录到日志中,没有超出就提示监管者没有超出。这样就写了一个工作中可以使用的简易的内存监控脚本。

#定义一个警告的阈值,然后进行比较
thereshold=80
flag=$(echo "$percent > $thereshold"|bc)
if (( $flag == 1 ));then
	echo "$cdate $ip_addr Total:{$mem_all}M Mem used:${percent}%" >>$logfile
else
	echo "内存的使用率在合理范围内"
fi

如果有问题,欢迎评论区留言。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值