当前位置: 首页 > news >正文

【shell函数】【shell脚本】定期自动检查服务器磁盘使用情况并发出告警

函数就是把一堆命令打包起来,给它起个名字,后面直接用这个名字就能执行所有命令。就像你把 “刷牙 + 洗脸 + 擦脸” 打包成 “起床洗漱”,以后直接说 “起床洗漱”,就自动执行这三步,不用每次都重复写

函数(){ 命令 }

注意:函数的返回值,不是函数执行完成后,变量的结果,而是你是否函数运行成功了
0代表成功了,非0代表失败了

例子1

带错误处理的除法函数,专门用来做除法计算,还能防止除以零的问题

任务场景:定期自动检查服务器磁盘使用情况并发出告警


某公司需要确保其生产环境中的服务器磁盘空间不会耗尽,以免影响系统的正常运行。运维团队希望使用Shell脚本定期检查服务器磁盘使用情况,当某个磁盘分区的使用率超过设定的阈值时,自动发出告警信息(例如通过发送邮件或日志记录),以便运维团队及时处理
项目需求:
定期检查服务器上各个分区的磁盘使用情况
设定一个使用率的阈值(如80%),当某个分区的使用率超过此阈值时发出告
在告警时记录日志,并发送邮件给运维团队,提醒需要清理磁盘。
使用Shell函数实现各项功能,包括检查磁盘、记录日志和发送告警checkdiskusage(). alertdiskusage()

1,提前安装sendmail邮件服务

yum install sendmail​ systemctl start sendmail​ systemctl enable sendmail

2,主机名称符合FQDN规范

FQDN = 功能 + 公司域名​
mysql.itcast.cn​
web.itcast.cn​

node1.itcast.cn​
node2.itcast.cn

hostnamectl set-hostname node1.itcast.cn

3.编写脚本

vim jiancha.sh
#!/bin/bash #磁盘使用率,一般写80,测试用会写的小 threshold=1 send_mail(){ echo -e "您的磁盘:$disk_path 使用率为:$disk_usage \n已经超过阈值,立刻删库跑路" | sendmail -t "自己的邮箱地址" } disk_usage_check(){ echo "开始检查磁盘" #定义日期 current_time=$(date +"%F %T") #获取磁盘使用率 df -h |grep "/dev/"|tail -2 |while read line do #获取磁盘路径 disk_path=$(echo $line|tr -s " "|cut -d " " -f1) #获取磁盘使用率 disk_usage=$(echo $line|tr -s " "|cut -d " " -f5 | tr -d "%") if [ $disk_usage -ge $threshold ];then send_mail $disk_path $disk_usage echo "$current_time - 您的磁盘:$disk_path 使用率为:$disk_usage ,已经超过阈值,立刻删库跑路 " >> $HOME/cipan.log else echo "先别跑,还能摸鱼" fi done } disk_usage_check
#设置定时任务 crontab -e

知识点解析

#获取磁盘使用率 df -h |grep "/dev/"|tail -2 |while read line

| while read line到底在干嘛?

你可以把它理解成一个 “自动循环器”:

  1. 前面的df -h | grep "/dev/" | tail -2会输出多行文本(比如两行磁盘信息)。

  2. | while read line会一行一行地读取这些文本,每次读取一行,就把这行内容存到变量line里。

  3. 然后进入dodone之间的循环体,处理这一行的数据(比如提取磁盘路径、使用率)。

  4. 处理完第一行后,它会自动读取下一行,重复上面的过程,直到所有行都处理完

read是 Shell 里用来读取输入并赋值给变量的命令,它最常见的用法有两种:

  1. 读取用户手动输入(比如read name,用户敲什么,$name就存什么)
  2. 读取管道传来的内容
#获取磁盘路径 disk_path=$(echo $line|cut -d " " -f1)

$line不是手动设置的,是while read line自动赋值的

这行的作用是$line里提取出磁盘的路径(比如/dev/sda1

假设$line现在存的是这行数据:

/dev/sda1 20G 10G 10G 50% /
  1. echo $line会把这行内容输出
  2. cut -d " " -f1以空格分割后,取第 1 列,得到/dev/sda1
  3. 最终disk_path变量的值就是/dev/sda1
http://www.jsqmd.com/news/976754/

相关文章:

  • 常熟记账报税哪家公司专业?从票据、申报和年报看选择标准 - 资讯速览
  • 小程序毕设选题推荐:基于微信小程序的直播带货商品数据分析系统django大数据基于微信小程序的直播带货商品数据分析系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 从SAT数据到业务指标:深入理解MAD与修正z-score在异常检测中的应用
  • 从Datasheet阅读到系统设计:四次作业重塑嵌入式工程思维
  • 工业高危环境防爆监控选型指南 | 区域服务商盘点与技术、运维要点解析
  • Trimble GNSS数据转换避坑指南:从convertToRinex安装到解决中文路径/乱码问题
  • iOS激活锁终极绕过:3步快速解锁iPhone完整指南
  • 从富士康事件看电子制造业:效率、人性与供应链管理的深层反思
  • 2026年6月PLM软件选型哪家专业,研发成本管理系统软件/研发流程管理软件,PLM软件开发哪家专业 - 品牌推荐师
  • 知网、维普、大雅标准各异,哪款 AI 能全平台适配降重?
  • FPGA远程升级避坑指南:用AXI Quad SPI IP读写N25Q128 Flash的完整流程
  • LabVIEW图形化编程入门:从数据流思想到工程实践
  • 深度解析 Cyber Engine Tweaks:如何突破《赛博朋克2077》的性能与脚本开发瓶颈
  • Agentic Search + Memory:当企业研究遇上_会思考的搜索_
  • 终极指南:3分钟让Windows 10/11完美运行经典IPX游戏
  • 2026年AI编程助手功能对比与推荐榜单
  • 3大核心功能解锁:Uncle小说PC版打造一站式智能阅读解决方案
  • 如何轻松获取国家中小学智慧教育平台的电子课本PDF文件?
  • 052、NPU的矩阵乘法单元:专用硬件加速
  • 2026 年6月工业润滑油滤油机技术选型指南:冷镦 / 拉丝 / 玻璃行业滤油机厂家对比 - GrowthUME
  • FF14国际服终极中文补丁:3步解锁完整中文游戏体验
  • 告别纯理论:手把手调试AXI Quad SPI IP,用JTAG to AXI Master验证Flash读写
  • OpenClaw小龙虾AI智能体零基础部署教程 Windows一键搭建数字员工
  • 西门子S7-1200与虹科Panorama SCADA基于OPC UA的工业数据采集实战
  • CentOS7服务器网络配置避坑实录:从虚拟机到物理机,nmcli命令与配置文件修改的实战经验
  • 别再只会用hadoop fs命令了!用Java API玩转HDFS文件操作(附完整代码示例)
  • 2026年将至,究竟哪个手机阅读器具备令人期待的智能推荐功能?
  • 储能系统双功能协同优化仿真:Matlab+CVX实现调峰削负荷与调频响应联合建模
  • CPU08新分支指令CBEQ与DBNZ:嵌入式MCU代码优化实战
  • 通达信缠论指标:3步开启专业K线分析新体验