Linux 服务器零成本告警方案:CPU / 内存超阈值自动发邮件(附完整脚本 + 避坑指南)
Linux 服务器零成本告警方案CPU / 内存超阈值自动发邮件附完整脚本 避坑指南 前言小服务器也需要「会喊救命」不是每个团队一上来就有 Zabbix、Prometheus。很多中小项目、个人服务器、测试机就是几台孤零零的 Linux。它们出问题时往往是用户先发现、你最后才知道——CPU 被打满、内存被吃光、服务卡死而你还蒙在鼓里。其实不用上重型监控一套mailx Shell Crontab的组合十几行脚本就能让服务器在扛不住时主动给你发邮件求救零成本、零依赖、五分钟落地。但网上那些「复制粘贴」教程有个通病照抄却跑不通——openssl命令写错、证书配置混乱、更要命的是 CPU 一旦持续超标脚本会每分钟给你发一封邮件一夜之间几百封把邮箱塞爆。本文把这些坑逐个填平给你一套真正能上生产的方案。本文适合谁想给中小型 Linux 服务器加个轻量告警、又不想上重型监控系统的开发者 / 运维。全程 CentOS/RHEL 系为例脚本可直接用。阅读约 12 分钟。目录整体方案一张图看懂告警链路为什么装了 mailx 还要配 SMTP第一步安装邮件工具第二步配置 QQ 邮箱 SMTP含授权码获取第三步配置 SSL 证书重点填坑第四步发送测试邮件第五步监控告警脚本生产级带防骚扰第六步加入 Crontab 定时执行常见故障排查FAQ读者最常问的问题总结与延伸① 整体方案一张图看懂告警链路Crontab每分钟触发 │ ▼ monitor.sh ──采集──► CPU 使用率 / 内存使用率 │ │ 超过阈值 ┌─ 否 → 静默退出 ├────────────────────►┤ │ └─ 是 → 冷却期内──是→ 跳过防邮件轰炸 │ │ │ 否 ▼ ▼ 组织告警内容 ──mailx──► SMTP(smtp.qq.com:465, SSL) ──► 你的邮箱 整套方案只有三个角色Crontab 负责定时、Shell 负责判断、mailx 负责送信。理解这条链路后面每一步都是在实现它。② 为什么装了 mailx 还要配 SMTP先破除一个常见误解。很多教程让你同时装sendmail其实mailx 本身就能直连 SMTP 发信通过/etc/mail.rc里的set smtp...并不依赖本机跑一个 sendmail/postfix 邮件服务器装sendmail只是提供一个本地 MTA 兜底非必需。若你只是想「借 QQ 邮箱把告警发出去」光配好 mailx 的 SMTP 就够了。省心结论本文核心是让 mailx 走 QQ 邮箱的 SMTP 中转。sendmail 装不装都行别在它身上纠结。③ 第一步安装邮件工具# mailx邮件客户端负责组织并发送邮件核心yum-yinstallmailx# sendmail本地 MTA可选不装也能用 SMTP 直发yum-yinstallsendmail⚠️注意部分系统的包名是s-nailmailx 的后继。如果yum install mailx找不到包试试yum install s-nail配置方式一致。④ 第二步配置 QQ 邮箱 SMTP含授权码获取4.1 先拿到「授权码」不是登录密码QQ 邮箱不允许用登录密码做 SMTP 认证必须用授权码登录 QQ 邮箱网页版 →「设置」→「账号」找到「POP3/IMAP/SMTP…服务」开启「IMAP/SMTP 服务」按提示短信验证后会生成一串 16 位授权码复制保存。4.2 编辑/etc/mail.rc在文件末尾追加以下配置把占位符换成你自己的# 发件人对方看到的发件邮箱setfromyour_mailqq.com# QQ 邮箱 SMTP 服务器SSL 加密端口 465setsmtpsmtps://smtp.qq.com:465# SMTP 登录用户名即你的 QQ 邮箱setsmtp-auth-useryour_mailqq.com# ⚠️ 这里填【授权码】不是 QQ 登录密码setsmtp-auth-passwordxxxxxxxxxxxxxxxx# SMTP 认证方式setsmtp-authlogin# 忽略 SSL 证书严格校验配合下一步的证书使用setssl-verifyignore# NSS 证书库目录setnss-config-dir/root/.certs安全红线/etc/mail.rc里存了授权码明文。务必chmod 600 /etc/mail.rc收紧权限且绝不要把它提交到 Git 或截图公开。授权码泄露 你的邮箱被人拿去发信。⑤ 第三步配置 SSL 证书重点填坑QQ 的 465 端口走 SSLmailx 需要信任其证书。这一步是全网教程翻车重灾区注意命令细节# 1. 创建证书目录mkdir-p/root/.certs/cd/root/.certs/# 2. 下载 QQ SMTP 的 SSL 证书# ⚠️ 是 s_client 不是 ssl_client全网抄错最多的一行echo-n|openssl s_client-connectsmtp.qq.com:465\|sed-ne/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p/root/.certs/qq.crt# 3. 导入证书到 NSS 信任库目录统一用 /root/.certs信任位统一certutil-A-nQQ SMTP-tC,,-d/root/.certs-i/root/.certs/qq.crt# 4. 验证证书已导入certutil-L-d/root/.certs填坑说明原始教程里openssl ssl_client是错的该命令根本不存在正确的是openssl s_client别一会儿-d ~/.certs一会儿-d ./混着来全程统一用绝对路径/root/.certs否则证书导到别处、mailx 又找不到证书别名-n后面的随便起个能认的即可不必照抄 “GeoTrust” 那一堆。⑥ 第四步发送测试邮件配置完先验证连通性echo这是一封测试邮件|mail-s服务器邮件配置测试your_receiverqq.com收到邮件→ 恭喜SMTP 证书全部搞定可以进下一步没收到→ 先别急着改脚本直接跳到第 ⑨ 节「故障排查」按步定位。 测试时收件人可以先填自己确认链路通了再改成实际告警接收人。⑦ 第五步监控告警脚本生产级带防骚扰下面这版脚本相比网上流传的版本做了四处关键加固注释已标出直接可用#!/bin/bash# # Linux CPU / 内存 告警脚本生产加固版# # ---------- 可配置项 ----------TOyour_receiverqq.com# 收件人CPU_THRESHOLD80# CPU 告警阈值(%)MEM_THRESHOLD90# 内存告警阈值(%)COOLDOWN1800# 告警冷却时间(秒)30分钟内不重复发防轰炸STATE_FILE/var/tmp/monitor_alert.ts# 记录上次告警时间# ------------------------------# 【加固1】自动探测主网卡 IP不再硬编码 eth0云主机常是 ens33/enp0s3ip$(ip-4-oaddr show scope global|awk{gsub(/\/.*/,,$4); print $4; exit})# CPU 使用率 100 - 空闲率cpu$(top-b-n1|grepCpu(s)|tail-1\|awk-Fid,{split($1,vs,,); vvs[length(vs)]; gsub(/[^0-9.]/,,v); printf %d, 100-v})# 内存使用率 总内存 - 可用内存/ 总内存# 注依赖 free 的 available 列CentOS7/procps-ng 3.3.10mem$(free-m|awk/^Mem/{printf %d, ($2-$7)/$2*100})# 【加固2】判断是否触发告警CPU 或 内存 任一超阈值if[$cpu-gt$CPU_THRESHOLD]||[$mem-gt$MEM_THRESHOLD];then# 【加固3】冷却机制冷却期内直接退出避免每分钟狂发邮件now$(date%s)if[-f$STATE_FILE];thenlast$(cat$STATE_FILE)if[$((now-last))-lt$COOLDOWN];thenexit0# 还在冷却期静默跳过fifiSUBJECT【服务器告警】$ipCPU:${cpu}% 内存:${mem}% -$(date%F %T)# 【加固4】用 mktemp 生成临时文件杜绝追加残留与多进程竞争MSG$(mktemp /tmp/monitor.XXXXXX){echo服务器 IP :$ipecho告警时间 :$(date%F %T)echo-----------------------------------echoCPU 使用率 :${cpu}% (阈值${CPU_THRESHOLD}%)echo内存使用率 :${mem}% (阈值${MEM_THRESHOLD}%)echo-----------------------------------echoCPU 占用 TOP10 进程ps-eopcpu,pid,user,args|sort-k1-nr|head-10echo-----------------------------------echo内存占用 TOP10 进程ps-eopmem,pid,user,args|sort-k1-nr|head-10}$MSGmail-s$SUBJECT$TO$MSGecho$now$STATE_FILE# 记录本次告警时间开始冷却rm-f$MSG# 清理临时文件fi四处加固是精华所在自动探测网卡—— 换台云主机就不用改脚本CPU 内存双指标—— 原版只判断 CPU内存爆了不告警等于漏报冷却机制—— 这是原版最致命的缺失CPU 持续高负载时没有冷却就会每分钟一封邮件把你邮箱撑爆mktemp—— 避免固定文件名的内容残留和并发竞争。⑧ 第六步加入 Crontab 定时执行# 1. 保存脚本并授权mvmonitor.sh /usr/local/bin/monitor.shchmodx /usr/local/bin/monitor.sh# 2. 编辑定时任务crontab-e# 3. 加入下面一行每分钟执行一次* * * * * /usr/local/bin/monitor.sh⚠️Crontab 三大隐形坑环境变量极简cron 里PATH很短ip/top/mail等命令建议用绝对路径或在脚本开头export PATH/usr/bin:/bin:$PATH验证是否在跑tail -f /var/log/cron看有没有触发记录别忘了给脚本执行权限否则 cron 静默失败、什么都不发。⑨ 常见故障排查邮件发不出去时按这个顺序逐步定位从底层往上排查项命令说明网络/端口通不通telnet smtp.qq.com 465或curl -v telnet://smtp.qq.com:465不通多半是安全组/防火墙没放行 465证书是否导入certutil -L -d /root/.certs列表里得能看到你导入的证书邮件系统日志tail -f /var/log/maillogmailx 的报错这里最全加详细日志发信echo test | mail -v -s test youqq.com-v打印完整 SMTP 交互一眼看出卡在哪授权码是否正确重新在 QQ 邮箱生成授权码认证失败 90% 是把登录密码当授权码了最有用的一招加-v参数发信mail -v ...它会把和 SMTP 服务器的整个握手过程打印出来认证失败、证书拒绝、连接超时都一目了然。⑩ FAQ读者最常问的问题Q1一定要用 QQ 邮箱吗不是。163、Gmail、企业邮箱都行改set smtp、smtp-auth-user、授权码即可。端口和加密方式按各家文档来多为 465/SSL 或 587/STARTTLS。Q2内存使用率算出来是 0 或报错你的free版本没有available列较老系统。改用free | awk /Mem/{printf %d,$3/$2*100}按 used/total 估算即可。Q3为什么加了冷却还是收到重复告警检查/var/tmp/monitor_alert.ts是否可写、COOLDOWN是否设得太小。也可能是多台机器都在发——把 IP 放进主题就能区分。Q4能不能告警后自动处理比如重启服务能但要极其谨慎。在发邮件后加处理逻辑前务必先加二次确认/最大执行次数限制否则可能误杀正常进程。建议先只告警、人工介入。Q5告警太多想分级警告/严重怎么办设两档阈值比如 CPU80% 发「警告」、95% 发「严重」并缩短冷却时间主题里标注级别。Q6不想收邮件想发到钉钉/企业微信/飞书把mail -s ... $MSG换成对应机器人的 Webhookcurl调用即可采集和判断逻辑完全复用。⑪ 总结与延伸本文用mailx Shell Crontab搭了一套零成本的 Linux 告警方案核心要点环节关键点SMTP 配置用授权码而非密码/etc/mail.rc记得chmod 600证书命令是openssl s_client目录全程统一用绝对路径脚本CPU 内存双指标、自动探测网卡、mktemp临时文件防骚扰冷却机制是生产必备否则邮箱必被轰炸定时Crontab 注意 PATH 精简、脚本要有执行权限这套方案简单有效适合中小型服务器和个人项目。当机器数量上到几十台、需要历史趋势图和统一看板时再平滑升级到Zabbix / Prometheus Grafana也不迟——但那之前这十几行脚本足够帮你守住服务器的第一道防线。 如果本文帮到你欢迎点赞 / 收藏 / 关注。评论区聊聊你是怎么给服务器做告警的

相关新闻

计算机网络与TCP/IP参考模型

计算机网络与TCP/IP参考模型

1 计算机网络概述 计算机网络是指通过通信设备和传输介质将地理位置分散的多台计算机系统互相连接起来,实现数据通信和资源共享的系统。 1.1 计算机网络分类 按网络的覆盖范围分类:广域网、城域网、局域网、个域网按网络的使用者分为:公用…

2026/7/15 16:09:27阅读更多 →
Privasis-Cleaner-4B社区贡献指南:如何参与这个开源隐私保护项目

Privasis-Cleaner-4B社区贡献指南:如何参与这个开源隐私保护项目

Privasis-Cleaner-4B社区贡献指南:如何参与这个开源隐私保护项目 【免费下载链接】Privasis-Cleaner-4B 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/Privasis-Cleaner-4B 想要为Privasis-Cleaner-4B这个开源隐私保护项目做出贡献吗?&a…

2026/7/15 16:04:26阅读更多 →
破解大众点评动态字体加密:构建高效智能的数据采集系统

破解大众点评动态字体加密:构建高效智能的数据采集系统

破解大众点评动态字体加密:构建高效智能的数据采集系统 【免费下载链接】dianping_spider 大众点评爬虫(全站可爬,解决动态字体加密,非OCR)。持续更新 项目地址: https://gitcode.com/gh_mirrors/di/dianping_spider…

2026/7/15 16:04:26阅读更多 →
信息安全毕设最新开题建议

信息安全毕设最新开题建议

0 选题推荐 - 云计算篇 毕业设计是大家学习生涯的最重要的里程碑,它不仅是对四年所学知识的综合运用,更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要,它应该既能体现你的专业能力,又能满足实际应…

2026/7/15 22:30:23阅读更多 →
Django纯内存图书商城毕业设计源码,含登录页、后台管理与操作视频

Django纯内存图书商城毕业设计源码,含登录页、后台管理与操作视频

本文还有配套的精品资源,点击获取 简介:这个Django图书商城系统专为本科毕业设计打造,所有数据运行在内存中,不用装数据库、不用改配置,下载解压就能跑。包含完整的用户登录页面(login.html)…

2026/7/15 22:30:23阅读更多 →
开源项目性能回归检测:用 Benchmark CI 防止性能劣化的自动化工程

开源项目性能回归检测:用 Benchmark CI 防止性能劣化的自动化工程

开源项目性能回归检测:用 Benchmark CI 防止性能劣化的自动化工程 一、v2.3.1 的教训:一个"小优化"带来的 40% 性能回退 一个开源的 JSON 验证库在 v2.3.1 中引入了一个"安全性改进":在 JSON 解析前增加了 Unicode 规范化…

2026/7/15 22:30:23阅读更多 →
Go 并发模型的性能边界:Goroutine 数量、Channel 吞吐与锁粒度的实验分析

Go 并发模型的性能边界:Goroutine 数量、Channel 吞吐与锁粒度的实验分析

Go 并发模型的性能边界:Goroutine 数量、Channel 吞吐与锁粒度的实验分析 一、10 万 Goroutine 同时运行的真相 一个实时推送服务使用了"每连接一 Goroutine"的模型。当同时在线用户达到 8 万时,服务的 CPU 使用率从 25% 飙升到 95%&#xff0…

2026/7/15 22:30:23阅读更多 →
培养肉产业为什么需要食品级生长因子?Qkine FG体系与细胞农业合规思路

培养肉产业为什么需要食品级生长因子?Qkine FG体系与细胞农业合规思路

摘要: Qkine食品级生长因子支持细胞农业规模化与合规化生产 关键词:生长因子、蛋白因子、细胞农业、食品级生物原料、食品级生长因子、培养肉、人造肉、无动物源细胞因子、细胞农业规模化、细胞农业合规、HACCP 在细胞农业与未来食品快速发展的今天&am…

2026/7/15 22:30:23阅读更多 →
模板驱动型文档自动化:结构化模板重构文档生产流

模板驱动型文档自动化:结构化模板重构文档生产流

1. 这不是“套模板”,而是用结构化思维重构文档生产流你有没有过这种体验:月底要交三份不同风格的行业报告,一份给技术团队看架构图和API响应示例,一份给市场部同事讲用户增长路径和转化漏斗,还有一份得塞进客户提案PP…

2026/7/15 22:25:22阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/15 6:42:19阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/15 6:12:45阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/15 10:54:00阅读更多 →
AI框架决定企业AI能走多远

AI框架决定企业AI能走多远

企业AI建设的第一性原理 企业搞AI,最关键的决定是什么?不是选哪家大模型,不是先做哪个场景,不是招多少AI人才——而是选哪个AI开发框架。 为什么?因为框架决定了企业AI能力的"天花板"。选对了框架&#xff0…

2026/7/15 0:01:30阅读更多 →
Java企业为什么需要AI框架

Java企业为什么需要AI框架

Java企业在AI时代的尴尬处境 Java是全球企业级应用开发的主流语言——全球超过一半的企业系统跑在Java上。但在AI浪潮面前,很多Java企业感到尴尬:大模型的接口是各种语言的,AI开发社区以其他语言为主流,似乎Java在AI时代"掉队…

2026/7/15 0:01:30阅读更多 →
CC3230x嵌入式开发实战:SD主机、定时器与低功耗模式深度解析

CC3230x嵌入式开发实战:SD主机、定时器与低功耗模式深度解析

1. 项目概述:为什么需要关注CC3230x的SD主机、定时器与低功耗?在物联网和嵌入式设备开发领域,我们常常面临一个核心矛盾:设备需要具备强大的连接能力、可靠的数据存储和实时控制功能,同时又必须严格控制功耗以延长电池…

2026/7/15 0:01:30阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/15 15:50:47阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/15 8:52:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/15 14:06:23阅读更多 →