核心是“监测+判断+通知”三步闭环:监控cpu、内存、根分区、关键进程及端口;用shell脚本判断并触发邮件等通知;通过cron定时执行,配合锁机制与去重逻辑防刷屏。
用脚本自动检测系统状态并发送提醒,核心是“监测 + 判断 + 通知”三步闭环。不需要复杂平台,linux 下几行 shell 脚本配合 cron 就能稳定运行。
监控哪些状态?选真正关键的指标
别一上来就监控所有东西。优先盯住影响服务可用性的硬指标:
- CPU 使用率持续超过 90% 超过 5 分钟(避免瞬时抖动误报)
- 内存剩余低于 512MB(或低于总内存 10%,取较小值)
- 根分区使用率 ≥ 90%(/dev/sda1 或实际挂载点需动态获取)
- 指定进程(如 nginx、redis-server)未在运行
- 某个端口(如 8080)无法响应连接
用简单脚本做判断和触发
例如检查磁盘空间并通知:
#!/bin/bash
THRESHOLD=90
USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$USAGE" -ge "$THRESHOLD" ]; then
echo "$(date): / usage is ${USAGE}%" | mail -s "ALERT: Disk full on $(hostname)" admin@example.com
fi
关键点:
- 用 df 获取真实挂载点,避免写死设备名
- 用 mail 命令发邮件(需提前配置 sendmail 或 msmtp)
- 加 date 时间戳,方便排查
- 脚本开头加 #!/bin/bash,保存后 chmod +x
让提醒准时又不刷屏
靠 cron 定时执行,但要防止重复告警:
- 设为每 5 分钟检查一次:
*/5 * * * * /path/to/check_disk.sh - 在脚本里加锁(如 touch /tmp/alert.lock,存在则退出),避免前次未结束就启动新实例
- 记录最近一次告警时间,1 小时内同类问题只报一次(用文件存时间戳比对)
- 非紧急状态(如 CPU 短暂冲高)可降级为写日志,不发通知
不止邮件:扩展通知渠道很简单
想推送到手机?不用重写逻辑,只换通知部分:
- 发微信:调用企业微信机器人 Webhook,用 curl POST JSON
- 发钉钉:同样用其自定义机器人,注意加签名验证
- 发 Telegram:用 Bot API,一行 curl 即可
- 本地弹窗(仅桌面环境):
notify-send "High CPU" "$(top -bn1 | head -n5)"
把通知逻辑封装成函数,主流程不变,切换渠道只需改一行调用。











