Linux系统运维脚本:编写bash脚本程序监控服务器的磁盘空间,在磁盘使用率超过阈值时发送警告邮件

目              录

一、要求

二、解决方案

(一)解决思路

(二)方案

三、脚本程序实现

(一)脚本代码和解释

1、脚本代码

2、代码解释

(二)脚本验证

1、脚本编辑

2、给予执行权限

3、运行脚本,查看效果

四、扩展


一、要求

        linux系统正常运行的过程中,一些应用程序会不断的产生日志和缓存等文件,这些数据一直会累加,占用硬盘空间。随着时间的推移,可能会占用大部分的磁盘空间,甚至占满。这样,可能导致业务程序运行出现异常、甚至导致有的业务程序停止运行。那么如何预防这种情况呢?

二、解决方案

(一)解决思路

        检测硬盘空间,可以采用df命令;然后通过shell命令,找到磁盘的空间占用率。发现空间快要满的时候,可以通过mail发出告警消息。通过这些命令,编一个bash的脚本文件,就可以实现需求。

(二)方案

       (1)通过ifconfig得到本机IP地址,或者hostname获取本机名称。

       (2)通过df、grep、awk等命令,获得硬盘的占有率

       (3)判断硬盘空间占用是否达到警戒线,比如80%

       (4)若超过80%,通过mail命令,发送email给维护人员。

三、脚本程序实现

        直接把脚本写出来,分享给大家。

(一)脚本代码和解释

1、脚本代码

        如下为编写的bash代码:

#!/bin/bash
#monitor available disk space
#提取本服务器的IP地址信息
IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
SPACE=$(df -hP | grep '/$' | awk '{print int($5)}')
if [ $SPACE -ge 80 ]
then
echo "$IP 服务器磁盘空间使率已经超过80%,请及时处理。"|mail -s "$IP 服务器硬盘告警" 124957736@qq.com
fi
echo "SPACE value: $SPACE"

2、代码解释

        脚本的主要目的是监控服务器的磁盘空间使用情况,并在磁盘空间使用率超过80%时发送警告邮件。以下是脚本的详细解释:

(1)#!/bin/bash

        这用于指示系统使用哪个解释器来执行此脚本。在这里,它告诉系统使用/bin/bash来执行此脚本。

(2)IP=ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`

       这行命令用于获取eth0网络接口的IP地址。

       ifconfig eth0:显示eth0网络接口的配置信息。

       grep "inet addr":从ifconfig的输出中筛选出包含“inet addr”的行。

       cut -f 2 -d ":":以冒号:为分隔符,提取第二个字段,这通常是IP地址前的部分,如inet addr:192.168.1.100中的192.168.1.100。

       cut -f 1 -d " ":以空格为分隔符,提取第一个字段,即IP地址本身。

       最终,IP变量将包含eth0网络接口的IP地址。

(3)SPACE=$(df -hP | grep '/$' | awk '{print int($5)}')

       这行命令用于获取根分区的磁盘空间使用率。

       df -hP:显示磁盘空间的使用情况,-h参数表示以人类可读的格式显示,-P参数表示以POSIX格式显示。

       grep '/$':筛选出以/结尾的行,这通常是根分区的行。

       awk '{print int($5)}':使用awk工具从df的输出中提取第五列,即磁盘的使用率,并将其转换为整数。

       最终,SPACE变量将包含根分区的磁盘空间使用率(整数形式)。

(4)if [ $SPACE -ge 80 ]

       这是一个条件判断语句,检查SPACE变量的值是否大于或等于80。

(5)then

       如果上述条件为真(即磁盘使用率超过80%),则执行接下来的代码块。

(6)echo "$IP 服务器磁盘空间使率已经超过80%,请尽快及时处理。"|mail -s "$IP 服务器硬盘超过警戒告警" 124957736@qq.com

       这行命令发送一封警告邮件。邮件的内容包括服务器的IP地址和一条消息,指出服务器的磁盘空间使用率已经超过80%,需要及时处理。邮件的收件人是 124957736@qq.com,邮件的标题是$IP 服务器硬盘告警。

(7)fi

       结束if条件语句。

(8)echo "SPACE value: $SPACE"

       这行命令在终端上显示SPACE变量的值,即根分区的磁盘空间使用率。

(二)脚本验证

1、脚本编辑

        使用编辑器,比如vi,把代码输入进去;

        保存这个脚本到一个文件中,比check_space.sh

2、给予执行权限

      chmod +x w check_space.sh

3、运行脚本,查看效果

        可以运行这个脚本来检查进程的运行情况,如下:

[121yunwei@ecs-52a1 home]$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
devtmpfs         3961580        0   3961580   0% /dev
tmpfs            3976852        0   3976852   0% /dev/shm
tmpfs            3976852   401964   3574888  11% /run
tmpfs            3976852        0   3976852   0% /sys/fs/cgroup
/dev/vda1      102948772 86067012  12251796  88% /
tmpfs             795368        0    795368   0% /run/user/1003
[121yunwei@ecs-52a1 home]$
[121yunwei@ecs-52a1 home]$
[121yunwei@ecs-52a1 home]$ sh check_space.sh服务器磁盘空间使率已经超过80%,请及时处理。
SPACE value: 88
[121yunwei@ecs-52a1 home]$ 
[121yunwei@ecs-52a1 home]$

四、扩展

        在实际使用中,系统硬盘可能有多个,你可能可以需要更改检测的硬盘,以及调整告警阈值,你可稍微做些修改,就可以适合您的应用了。比如,设对应的硬盘的空间阈值,并把80%的阈值改成90%,你可以更改如下两行命令即可:

SPACE=$(df -hP | grep '/run$' | awk '{print int($5)}')

 if [ $SPACE -ge 90 ]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/714625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用递归求解数组最大值(c++题解)

题目描述 输入一个整数n(n不大于1000),接下来分别为n个整数,请使用递归求取最大值。 输入格式 第一行:正整数n。 第二行:n个整数。 输出格式 输出最大值 样例 样例输入 复制2 1 2样例输出 复制2 …

Postman: 前端必备工具还是后端独享利器

Postman 的使用场景:适用于前端和后端 Postman 是一个流行的 API 测试与开发工具。它被广泛地应用在前后端开发的过程中,但是很多人对于它的使用场景存在疑惑。那么,到底是前端用还是后端用呢?本文将从多个角度详细解答这个问题。…

Node.js_基础知识(CommonJS模块化)

CommonJS模块化规范 加载时机: 服务器端: 模块的加载是运行时同步加载的,node.js实现了模块化规范浏览器端: 模块需要提前编译打包处理,需使用Browserify编译打包,推荐使用ESM 暴露模块:module.exports、exports导入模…

“а”搭配使用更地道,柯桥外贸俄语培训

1、а именно 就是说,就是,正是 例: в то время, а именно год назад. 那时, 也就是一年前。 не кто иной, а именно г-н Ван. 不是别人,就是王先生 2、а наоборот …

【嵌入式——QT】QListWidget

QListWidget类提供了一个基于项的列表小部件,QListWidgetItem是列表中的项,该篇文章中涉及到的功能有添加列表项,插入列表项,删除列表项,清空列表,向上移动列表项,向下移动列表项。 常用API a…

C语言数据结构基础——双链表专题

前言 书接上回,双链表便是集齐带头、双向、循环等几乎所有元素的单链表PLUS. 1.初始化、创建双链表 typedef int LTDataType; typedef struct LTNode {LTDataType data;struct LTNode* next;struct LTNode* prev; }LTNode; 不同于单链表,此时每个节点应…

selenium初始学习--打开新标签操作

selenium 打开新标签操作 简单说一下使用 环境 :python 3.9 selenium 4,18 初始化操作 目的 打开bilibilie网站并搜索视频(电影) 并点击观看 操作 打开应用并搜索网址 from selenium import webdriver import timefrom selenium.webdr…

PySide6+VSCode Python可视化环境搭建

#记住在cmd中运行,不要在vscode里运行,否则env会装到工程目录下 python -m venv env #env\Scripts\activate.bat pip install pyside6 下载本期源码 vscode装一个PYQT Integration插件,设置好两个路径(下面有个脚本用于获取路径&…

MySQL 数据库表设计和优化

一、数据结构设计 正确的数据结构设计对数据库的性能是非常重要的。 在设计数据表时,尽量遵循一下几点: 将数据分解为合适的表,每个表都应该有清晰定义的目的,避免将过多的数据存储在单个表中。使用适当的数据类型来存储数据&…

2020小学甲组--恢复数组

题目描述 有一个数组a[1..n]&#xff0c;但是这个数组的内容丢失了&#xff0c;你要尝试恢复它。已知以下的三个事实&#xff1a; 1、对于1<i<n&#xff0c;都有a[i]>0&#xff0c;且所有的a[i]互不相同。即a数组保存的全部都是正整数&#xff0c;且互不相同。 2、…

挑战杯 基于机器视觉的车道线检测

文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分…

范伟:你们怎么老提1,200呢,有什么典故啊?赵本山:没有啊!

范伟&#xff1a;你们怎么老提1,200呢,有什么典故啊?赵本山&#xff1a;没有啊&#xff01; --小品《面子》&#xff08;中3&#xff09;的台词 表演者&#xff1a;赵本山 高秀敏 范伟 &#xff08;接上&#xff09; 范伟&#xff1a;哎吃啊 赵&#xff1a;哎呀这电视看的挺…

Acwing枚举、模拟与排序(一)

连号区间数 原题链接&#xff1a;https://www.acwing.com/problem/content/1212/ 初始最小值和最大值的依据是题目给出的数据范围。只要在数据范围之外就可以。 连号的时候&#xff0c;相邻元素元素之间&#xff0c;差值为1。那么区间右边界和左边界&#xff0c;的值的差&#…

cAdvisor+Prometheus+Grafana 搞定Docker容器监控平台

cAdvisorPrometheusGrafana cAdvisorPrometheusGrafana 搞定Docker容器监控平台1、先给虚拟机上传cadvisor2、What is Prometheus?2.1、架构图 3、利用docker安装普罗米修斯4、安装grafana cAdvisorPrometheusGrafana 搞定Docker容器监控平台 1、先给虚拟机上传cadvisor cAd…

MySQL事务和锁机制

MySQL技术——事务和锁机制 一、事务&#xff08;1&#xff09;概述&#xff08;2&#xff09;ACID特性&#xff08;3&#xff09;事务并发存在的问题&#xff08;4&#xff09;事务的隔离级别 二、锁机制&#xff08;1&#xff09;锁的力度&#xff08;2&#xff09;表的分类&…

网络编程-编码与解码(Protobuf)

编码与解码 下面的文字都来自于极客时间 为什么要编解码呢&#xff1f;因为计算机数据传输的是二进制的字节数据 解码&#xff1a;字节数据 --> 字符串&#xff08;字符数据&#xff09; 编码&#xff1a;字符串&#xff08;字符数据&#xff09;–> 字节数据 我们在编…

Python 实现海康机器人工业相机 MV-CS050-10GC 的实时显示视频流及拍照功能(实时显示视频流同时可以进行拍照)

参考链接&#xff1a; https://www.cnblogs.com/HanYork/p/17388506.html https://www.cnblogs.com/miracle-luna/p/16960556.html#5138211 Flask搭建流媒体服务器&#xff1a;使用Flask搭建一个流媒体服务器_multipart/x-mixed-replace; boundaryframe-CSDN博客

公共字段自动填充

在开发中经常面临对于一些公共字段的赋值。 如在下表中&#xff1a; 如何让程序自动为我们需要赋值的公共字段进行赋值&#xff0c;避免在业务代码中重复写这些公共字段的赋值代码 如下图所示&#xff1a; 实现思路&#xff1a; 1.自定义注解AutoFill&#xff0c;用于标识需…

linux环境安装cuda toolkit

1 全新安装 如果环境中没安装过cuda版本&#xff0c; 这种情况下比较简单。 直接在https://developer.nvidia.com/cuda-toolkit-archive选择对应版本下载安装即可。 如下为安装cuda toolkit 11.8. 2 环境中已经存在其他版本 这种情况下比较复杂一些。 首先要确认最高支持的…

李沐动手学习深度学习——4.2练习

1. 在所有其他参数保持不变的情况下&#xff0c;更改超参数num_hiddens的值&#xff0c;并查看此超参数的变化对结果有何影响。确定此超参数的最佳值。 通过改变隐藏层的数量&#xff0c;导致就是函数拟合复杂度下降&#xff0c;隐藏层过多可能导致过拟合&#xff0c;而过少导…