
Linux Shell 自动巡检脚本的核心目标是用轻量、可靠、可维护的方式,定期检查系统关键状态,并及时反馈异常。不依赖复杂框架,纯 Bash 即可覆盖 CPU、内存、磁盘、服务、日志等高频问题点。
巡检项设计:聚焦真实风险点
避免“为巡而巡”,优先纳入以下易出问题且影响面广的指标:
-
CPU 负载:检查
uptime的 15 分钟负载是否持续 > CPU 核数 × 1.5 -
内存使用率:排除缓存(
free -m中的available值),低于 5% 触发告警 -
根分区使用率:
df -h / | awk 'NR==2 {print $5}' | sed 's/%//'≥ 90% 即预警 -
关键服务状态:如
sshd、nginx或自定义服务,用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)用于临时专项检查,提升排障效率










