LinuxShell自动巡检脚本_巡检方案实现

2次阅读

LinuxShell自动巡检脚本_巡检方案实现

linux Shell 自动巡检脚本的核心目标是用轻量、可靠、可维护的方式,定期检查系统关键状态,并及时反馈异常。不依赖复杂框架,纯 bash 即可覆盖 CPU、内存、磁盘、服务、日志等高频问题点。

巡检项设计:聚焦真实风险点

避免“为巡而巡”,优先纳入以下易出问题且影响面广的指标:

  • CPU 负载:检查 uptime 的 15 分钟负载是否持续 > CPU 核数 × 1.5
  • 内存使用率:排除缓存(free -m 中的 available 值),低于 5% 触发告警
  • 根分区使用率df -h / | awk 'NR==2 {print $5}' | sed 's/%//' ≥ 90% 即预警
  • 关键服务状态:如 sshdnginx 或自定义服务,用 systemctl is-active --quiet 服务名 判断
  • 异常登录记录:检查 /var/log/secure 最近 10 分钟是否有 Failed password 突增(可用 awk '/Failed password/ && $0 ~ /$(date -d "10 minutes ago" +"%b %d %H:%M")/ {count++} END{print count+0}'

脚本结构:分层清晰,便于定位

一个实用的巡检脚本建议按功能拆分为三段:

  • 配置区:定义告警阈值、收件人邮箱、日志路径、需检查的服务列表(数组形式),方便统一维护
  • 检测函数区:每个巡检项封装为独立函数(如 check_disk()check_sshd()),返回 0(正常)或 1(异常)
  • 执行与汇总区:调用各函数,收集结果;异常时写入日志并触发邮件(可用 mail -s "告警" admin@example.com )

自动化调度与日志留存

cron 实现定时运行,例如每 30 分钟一次:

*/30 * * * * /opt/scripts/health_check.sh > /dev/NULL 2>&1

同时在脚本中加入日志记录逻辑:

  • 每次运行生成带时间戳的简要日志(如 /var/log/health/health_$(date +%Y%m%d_%H%M).log
  • 异常详情追加到统一告警日志(/var/log/health/alert.log),保留最近 7 天
  • 日志行首标注主机名和时间,便于多机汇总分析

轻量告警与人工介入衔接

不追求实时推送,先确保信息可查、可追溯:

  • 默认只在发现异常时发邮件,正文含主机名、时间、具体哪项失败及原始命令输出片段
  • 提供一键诊断入口:脚本末尾输出类似 【快速复现】运行 /opt/scripts/health_check.sh --debug 可查看详细过程
  • 支持传参模式(如 --disk-only)用于临时专项检查,提升排障效率
text=ZqhQzanResources