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


    目录

    知识概览

    总体脚本编写

    date

    awk

    grep

    bc


    知识概览

    总体脚本编写

    1. #!/bin/bash
    2. #定义日志的文件名和日期
    3. cdate=$(date +%Y%m%d%H%M%S)
    4. logfile="/tmp/memlog_{$0}.log"
    5. #拿到ip
    6. ip_addr=$(ip add|grep "ens33$"|awk '{print $2}')
    7. #总内存和使用的内存
    8. mem_all=$(free -m|head -2|tail -1|awk '{print $2}')
    9. mem_used=$(free -m|head -2|tail -1|awk '{print $3}')
    10. #计算使用率
    11. percent=$(echo "scale=2;$mem_used/$mem_all*100"|bc)
    12. #定义一个警告的阈值,然后进行比较
    13. thereshold=80
    14. flag=$(echo "$percent > $thereshold"|bc)
    15. if (( $flag == 1 ));then
    16. echo "$cdate $ip_addr Total:{$mem_all}M Mem used:${percent}%" >>$logfile
    17. else
    18. echo "内存的使用率在合理范围内"
    19. fi

    date

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

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

    awk

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

    1. #总内存和使用的内存
    2. mem_all=$(free -m|head -2|tail -1|awk '{print $2}')
    3. 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

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

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

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

    bc

    bc是linux自带的运算器。

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    如何实现MongoDB数据的快速迁移?
    有哪些编程语言能在AI的应用上大显身手?
    c++ 模板 指针类型偏特化
    【OpenCV 例程300篇】234. 特征提取之主成分分析(PCA)
    【AGC】巧用团队帐号功能让未实名帐号也能登录AGC
    计及调频成本和荷电状态恢复的多储能系统调频功率双层优化【蓄电池经济最优目标下充放电】(基于matlab+yalmip+cplex的蓄电池出力优化)
    Redis基础
    MySQL中CHANGE REPLICATION FILTER 语句详解
    数据库 | 试卷五&试卷六&试卷七
    javaee之黑马乐优商城5
  • 原文地址:https://blog.csdn.net/qq_57629191/article/details/136355097