前言

1. 问题背景与需求

2. Bash 脚本监控资源

3. Bash 脚本判断阈值

4. 配置 msmtp 发送邮件

4.1 安装 msmtp

4.2 创建配置文件 /etc/msmtprc

5. 发送邮件

5.1 给别人发邮件

6. 完整示例脚本

7. 测试方法

8. 常见问题解答

9. 总结

前言

在运维过程中,监控服务器的 CPU、内存和磁盘使用率非常重要。当资源使用率过高时,及时收到邮件告警可以避免服务中断。本文将结合实践,详细讲解如何用 Bash 脚本监控系统资源,并通过 msmtp 发送邮件告警。


1. 问题背景与需求

  • 监控目标

    • CPU 使用率

    • 内存使用率

    • 磁盘使用率

  • 告警条件:当任意资源使用率超过阈值时发送邮件

  • 邮件需求

    • 发送到指定收件人(自己或他人邮箱)

    • 邮件包含主题和正文

    • 邮件通过自己的 SMTP 账户发送(例如 QQ 邮箱)


2. Bash 脚本监控资源

获取系统资源使用率的常用命令如下:

# CPU 使用率 
cpu_use=$(top -bn1 | grep "Cpu(s)" | awk -F, '{print 100 - $4}' | awk -F. '{print $1}')

说明

  • top -bn1:以批处理模式(非交互)输出一次 CPU 和内存状态

  • grep "Cpu(s)":筛选包含 CPU 信息的行

  • awk -F, '{print 100 - $4}'$4%id(CPU 空闲百分比),用 100 - $4 计算 CPU 使用率

  • awk -F. '{print $1}':取整数部分,方便比较阈值

# 内存使用率
mem_use=$(free | awk '/Mem/{print $3/$2 * 100}' | awk -F. '{print $1}')

说明

  • free:显示内存使用情况

  • awk '/Mem/{print $3/$2 * 100}'$3 是已用内存,$2 是总内存,计算百分比

  • awk -F. '{print $1}':取整数部分

# 根目录磁盘使用率disk_use=$(df / | awk 'END{print $5}' | sed 's/%//')

说明

  • df /:查看根目录分区使用情况

  • awk 'END{print $5}':取最后一行(分区行)的第五列(使用率)

  • sed 's/%//':去掉百分号,方便比较


3. Bash 脚本判断阈值

设置阈值,并将告警信息拼接到变量 ALERT_MSG

CPU_WARNING=80 
MEM_WARNING=80 
DISK_WARNING=80 
ALERT_MSG="" 
# CPU告警判断
if [ "$cpu_use" -ge "$CPU_WARNING" ]; then 
ALERT_MSG+="CPU使用率:${cpu_use}%超过阈值${CPU_WARNING}%\n" 
fi

说明

  • [ "$cpu_use" -ge "$CPU_WARNING" ]:判断 CPU 是否大于等于阈值

  • ALERT_MSG+=:追加告警信息

  • \necho -e 输出时换行

    类似逻辑用于内存和磁盘判断。


4. 配置 msmtp 发送邮件

4.1 安装 msmtp

# CentOS/RHEL 
sudo yum install msmtp -y 
# Ubuntu/Debian
sudo apt install msmtp -y 

说明

  • msmtp 是轻量级 SMTP 客户端

  • 支持管道输入,将文本内容发送为邮件正文

4.2 创建配置文件 /etc/msmtprc

defaults 
auth on # 开启认证 
tls on # 开启 TLS 加密 
tls_trust_file /etc/ssl/certs/ca-bundle.crt # CA 证书路径 
logfile /var/log/msmtp.log # 日志文件 account qq 
host smtp.qq.com # SMTP 服务器地址 
port 587 # SMTP 端口 
from 3426848201@qq.com # 发件人邮箱 
user 3426848201@qq.com # SMTP 用户名 
password zqhvzueytjhncjae # SMTP 授权码 account default : qq # 默认账户

说明

  • 日志文件使用绝对路径,避免 ~ 不被解析

  • 权限必须设置为 600:chmod 600 /etc/msmtprc

  • account default : qq 表示默认发送账户


5. 发送邮件

msmtp 需要在邮件内容里写主题:

if [ -n "$ALERT_MSG" ]; then ( echo "Subject: 服务器资源告警" echo # 空行,分隔邮件头和正文 echo -e "$ALERT_MSG" # 邮件正文 ) | msmtp "$MAIL_TO" 
fi

说明

  • if [ -n "$ALERT_MSG" ]:仅当有告警信息时发送邮件

  • echo "Subject: ...":邮件主题

  • echo:空行分隔邮件头和正文

  • echo -e "$ALERT_MSG":输出正文,支持换行


5.1 给别人发邮件

MAIL_TO="friend@example.com" ( echo "From: 3426848201@qq.com" echo "To: friend@example.com" echo "Subject: 服务器资源告警" echo echo -e "$ALERT_MSG" ) | msmtp -t

说明

  • -t 告诉 msmtp 从邮件头读取收件人

  • 可以一次发给多人,用逗号或空格隔开


6. 完整示例脚本

#!/bin/bash
#系统资源监控脚本#配置邮箱信息
MAIL_TO="3426848201@qq.com" #收件人邮箱#邮件标题
TITLE="服务器资源告警"#获取CPU使用率
cpu_use=$(top -bn1 | grep "Cpu(s)" | awk -F, '{print 100 - $4}' | awk -F. '{print $1}')
#获取磁盘使用率
disk_use=$(df / | awk 'END{print $5}' | sed 's/%//')
#获取内存使用率
mem_use=$(free | awk '/Mem/{print $3/$2 * 100}' | awk -F. '{print $1}')#设置告警阈值
CPU_WARNING=1
MEM_WARNING=1
DISK_WARNING=1#用于保存监控信息
ALERT_MSG=""#判断CPU
if [ "$cpu_use" -ge "$CPU_WARNING" ]; thenALERT_MSG+="CPU使用率:${cpu_use}%超过阈值${CPU_WARNING}%\n"
fi
#判断内存
if [ "$mem_use" -ge "$MEM_WARNING" ]; thenALERT_MSG+="内存使用率:${mem_use}%超过阈值${MEM_WARNING}%\n"
fi
#判断磁盘
if [ "$disk_use" -ge "$DISK_WARNING" ]; thenALERT_MSG+="磁盘使用率:${disk_use}%超过阈值${DISK_WARNING}%\n"
fi#如果有告警就发邮件
if [ -n "$ALERT_MSG" ]; then(echo "Subject: $TITLE"echoecho -e "$ALERT_MSG") | msmtp "$MAIL_TO"
fi

7. 测试方法

  1. 将阈值调低,例如 1%,确保告警触发

  2. 执行脚本:

   sh Cpu内存监控.sh
  1. 检查收件邮箱,确认主题和正文显示正确

注意:可使用crontab -e

     */5  *  *  *  *  /bin/bash  /path(脚本路径)/shname.sh(脚本名)

实现全自动监控,如遇执行失败,请检查脚本是否有执行权限,没有可用chmod提权


8. 常见问题解答

问题原因解决方法
收到空邮件$ALERT_MSG 为空,或邮件头和正文没有空行确保告警信息非空,邮件头与正文间加空行
收到无主题邮件msmtp 不会自动加主题在邮件内容第一行写 Subject:
msmtp: input error配置文件有语法错误或使用 ~使用绝对路径、保持 Unix 换行格式、权限 600
无法发送邮件SMTP 配置错误确认 hostportuserpassword 正确,使用授权码

9. 总结

  • Bash + msmtp 可以实现轻量级系统资源监控邮件告警

  • 邮件头、主题和正文必须正确,否则收件人可能看到空邮件或无主题

  • 可以扩展支持多收件人、日志记录和定时任务

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

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

相关文章

设计整体 的 序分(三“释”)、正宗分(双“门”)和流通分(统一的通行表达式) 之3 “自明性”(腾讯元宝 之2)

Q&AQ11、可能还需要补充 魂轴、体轴 和 中心轴 并行 上升 的内容Q11.1、我刚才说“可能还需要补充 魂轴、体轴 和 中心轴 并行 上升 的内容” 是指的 我们今天前面讨论 得出的整体设计 的一个概念整体 的一个双螺旋上升结构中的三个轴。 您刚才是这样 理解的吗?…

使用Ansible自动化部署Hadoop集群(含源码)--环境准备

现在我们有5台虚拟机,已经配置好了主机名和网络我们的目标是通过Ansible实现自动化部署hadoop集群。在此之前,我们先编写一个shell脚本来配置hadoop集群的环境,包括安装软件、安装配置Ansible(一个主节点四个工作节点)…

C#海康车牌识别实战指南带源码

C#海康车牌识别实战指南带源码前言车牌识别技术在智能交通、停车场管理等领域有着广泛的应用。海康威视作为国内领先的安防厂商,其车牌识别相机提供了丰富的SDK接口供开发者使用。本文将详细介绍如何使用C#语言结合海康威视SDK实现车牌识别功能,并解析关…

智慧能源新范式:数字孪生平台如何驱动风电场的精细化管理?

摘要你有没有想过,一座风力发电场背后,藏着一个“看不见的孪生兄弟”?它能提前预知风机故障,实时模拟极端天气的影响,甚至能“训练”运维人员在虚拟场景中演练抢修。这就是数字孪生——一个让风电场从“靠经验管理”转…

STM32-FreeRTOS操作系统-任务管理

引言 随着嵌入式技术的飞速发展,STM32与FreeRTOS的融合愈发紧密。本文聚焦于STM32平台下FreeRTOS操作系统的任务管理,旨在为开发者提供清晰的思路与实用的技巧,助力高效开发。 为什么要进行任务管理? 在嵌入式系统中,…

工业领域 ACP 协议全解析:从入门到实战案例

工业领域 ACP 协议全解析:从入门到实战案例 文章目录工业领域 ACP 协议全解析:从入门到实战案例一、前言二、ACP 协议是什么?1. 基本定义2. 与数据传输协议的区别三、ACP 协议的核心功能1. 身份认证(Authentication)2.…

计算机组成原理:计算机硬件的基本组成

📌目录🖥️ 计算机硬件的基本组成:从经典到现代的架构演进🧩 一、计算机硬件的五大部分:功能与协同📥 (一)输入设备:人机交互的“入口”📤 (二&am…

AI歌手功能终于上线!Suno AI 带你保存歌曲的灵魂

当我们谈论一首歌时,究竟是什么让它“独一无二”?是主唱的声音质感?是旋律里的氛围?还是那种无法复制的风格气息? 如今,Suno AI 给出了答案—— AI歌手功能正式上线! 🌟什么是「AI…

Dubbo3.3 Triple协议处理东西向流量

前言 Apache Dubbo 3.3 对 Triple 协议做了升级,现在 Dubbo 不仅可以处理东西向流量,也可以处理南北向流量。 **东西向流量(East-West Traffic) ** 指数据中心或网络内部同级设备/服务之间的通信。例如,微服务之间的…

操作系统核心特点详解:从并发到分布式,一文搞懂考研必备知识

操作系统核心特点详解:从并发到分布式,一文搞懂考研必备知识 大家好,今天咱们来聊聊操作系统(OS)这个计算机世界的“大管家”。想象一下,你的电脑就像一个忙碌的厨房,操作系统就是那个厨师长&am…

2025精选5款AI视频转文字工具,高效转录秒变文字!

视频转文本的需求早已渗透到生活的方方面面:网课学习需要提取课件台词、会议记录想快速整理要点、追剧时急需生肉转字幕…… 手动记录不仅费时,还容易遗漏关键信息。今天就分享5款实用工具,从免费到专业全覆盖,几步操作就能让视频…

MyBatis Example模式SQL注入风险

在使用MyBatis逆向工程生成的Example查询模式时,很多开发者看到XML中存在${}占位符就会担心SQL注入问题。但实际上,存在${}并不等同于存在SQL注入风险。本文将详细分析何时会存在真正的注入风险。 存在SQL注入的两个关键前提 前提一:Criteria…

宝塔PostgreSQL安装pgvecto插件contrib包实现向量存储

1. 宝塔安装 首先确保你的宝塔已经安装了 PostgreSQL。 安装好后是能看到上面这个界面的。 我安装的是 16.1 版本,下面的教程讲的也是 16.1 版本的。 2.开放防火墙的端口号 5432 3.允许外部访问所有数据库 4.设置超级管理员用户密码 用户名默认为:po…

麒麟系统 doc转pdf

# 安装LibreOffice(如果尚未安装) sudo apt update sudo apt install libreoffice# 将DOC转换为PDF libreoffice --headless --convert-to pdf 你的文档.doc# 或者指定输出目录 libreoffice --headless --convert-to pdf --outdir /输出目录 你的文档.do…

Python实现生成矩形框、三角形框、六边形框和圆环点云

本节我们分享上节提到的不填充点云。在点云处理、计算机视觉与工业检测中,几何轮廓(边框/环)点云比实心点云更能反映物体的边缘特征、结构骨架与形貌突变区域。Python 借助 NumPy 即可快速生成矩形边框、三角形边框、六边形边框与圆环点云&am…

2025年本体论:公理与规则的挑战与趋势

摘要本文章旨在深入探讨本体论(Ontology)中公理(Axioms)与规则(Rules)的核心概念、技术实现、验证方法、性能评估及其在2025年的前沿趋势与挑战。公理与规则是构建严谨、一致知识模型的逻辑基石&#xff0c…

【51单片机】【protues仿真】基于51单片机PM2.5空气质量检测系统

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 一、主要功能 1、LCD1602液晶显示 2、按键​设置阈值 3、PM2.5大于阈值时启动声光警报 二、使用步骤 基于51单片机的PM2.5空气质量检测系统通常采用STC89C51/52作为核心控制器,结合…

【目录-单选】鸿蒙HarmonyOS开发者基础

用哪一种装饰器修饰的组件可作为页面入口组件?Look at the answer下面是ArkTS中类名、枚举名推荐的代码风格是 Look at the answer向服务器提交表单数据,以下哪种请求方式比较合适 Look at the answer使用http发起网络请求,需要以下哪种权限&…

maven【maven】技术详解

MavenMaven的本质是项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)Project Object Model:项目对象管理模型作用: 项目构建:提供标准的、跨平台的自动化项目构建方式依赖管理:方…

【操作系统-Day 25】死锁 (Deadlock):揭秘多线程编程的“终极杀手”

Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…