Linux Shell脚本能高效实现轻量级环境监控与告警,通过采集CPU、内存、磁盘、网络等指标,设定阈值触发告警,集成邮件/短信通知,并借助crontab定时执行与日志归档,构建稳定闭环。

Linux Shell 脚本可以高效实现轻量级环境监控与告警,无需依赖复杂平台,适合中小规模服务或边缘节点的日常运维。
监控关键系统指标
通过 Shell 脚本能快速采集 CPU、内存、磁盘和网络等核心指标。例如用 top -bn1 或 ps aux 获取高负载进程,用 free -m 提取可用内存,用 df -h 检查挂载点使用率(重点关注 /、/var、/tmp)。建议每 5 分钟执行一次,避免高频轮询影响性能。
- CPU 使用率超 90% 持续 3 次,触发告警
- 内存剩余低于 500MB 或使用率 ≥ 95%,记录并通知
- 根分区使用率 ≥ 90%,同时检查是否有大日志文件(如
/var/log/*.log)
检测服务端口与进程状态
用 nc -z localhost 8080 或 ss -tuln | grep ':3306' 判断关键端口是否监听;用 pgrep -f "nginx" 或 systemctl is-active nginx 确认服务进程存活。对 Web、数据库、缓存类服务应单独配置检测逻辑,失败后尝试自动重启(如 systemctl restart redis),并记录操作日志。
- 端口不通且进程不存在时,先尝试重启服务,再发告警
- 连续 3 次检测失败才触发告警,避免瞬时抖动误报
- 将检测结果写入临时日志(如
/tmp/health-check.log),便于回溯
集成邮件或短信告警
Shell 脚本可通过 mail 命令发送邮件(需提前配置 sendmail 或 msmtp),也可调用云厂商 API(如阿里云 SMS SDK)发短信。告警内容应包含时间、主机名、异常指标、建议操作(如“请检查 /var/log/nginx/error.log”),避免只写“服务异常”这类模糊信息。
- 使用
hostname和date +%F_%T自动填充上下文 - 告警频率限制:同一问题 1 小时内最多通知 1 次,防止刷屏
- 测试阶段先输出到终端或文件,确认格式无误再启用真实通道
定时执行与日志归档
将脚本加入 crontab 实现周期运行(如 */5 * * * * /opt/monitor/check.sh >> /var/log/monitor.log 2>&1)。日志需定期轮转,可用 logrotate 配置,或脚本内用 find /var/log/monitor*.log -mtime +7 -delete 清理旧日志。同时保留最近 3 次成功/失败的快照,方便对比趋势。
- 脚本开头加
set -e和set -u提升健壮性 - 所有路径使用绝对路径,避免 crontab 执行时环境变量缺失
- 用
lockfile或mkdir方式实现单实例运行,防重复触发
不复杂但容易忽略细节,把指标采集、判断逻辑、通知动作和执行保障串起来,就能构建出稳定可用的监控告警闭环。









