Linux自动巡检脚本核心是标准化、定时化、可追溯化关键检查任务,聚焦CPU负载、内存使用率、磁盘空间、关键进程状态和近期系统日志异常,采用模块化结构、cron调度、邮件告警及HTML报告归档。

Linux自动巡检脚本的核心是把重复性高、时效性强的系统检查任务标准化、定时化、可追溯化。关键不在于功能多全,而在于稳定可靠、输出清晰、异常可定位。
巡检项设计:聚焦关键指标,避免过度采集
优先覆盖直接影响业务可用性的基础维度,例如:
-
CPU负载:取
uptime或top -bn1中的1/5/15分钟平均值,超过阈值(如1.5×CPU核心数)标记告警 -
内存使用率:排除缓存(
MemAvailable),用free -m计算真实占用比例,>90%触发提醒 -
磁盘空间:针对
/、/var、/home等关键挂载点,使用df -hP,>95%标红 -
关键进程状态:检查
sshd、nginx、mysql等是否存活(systemctl is-active --quiet 服务名) -
最近系统日志异常:用
journalctl -S "2 hours ago" | grep -i "fail\|error\|oom\|killed"快速抓取近期错误
脚本结构:模块化+日志分离+结果归档
一个易维护的脚本应分三部分:
- 配置区:定义阈值、检查路径、邮件接收人、日志保留天数等,方便统一调整
-
检查函数区:每个巡检项封装为独立函数(如
check_disk()),返回0(正常)或1(异常),便于复用和调试 -
主执行流:调用各函数,汇总结果写入带时间戳的HTML/文本报告(如
/var/log/inspect/inspect_$(date +\%Y\%m\%d_\%H\%M).log),同时保留原始命令输出供回溯
自动化调度与通知:用cron+简单通知链
不依赖复杂平台,用系统级能力即可落地:
- 通过
crontab -e添加:0 6 * * * /opt/scripts/inspect.sh >> /var/log/inspect/cron.log 2>&1(每日6点执行) - 脚本末尾加判断:若检测到异常,用
mail -s "【巡检告警】$(hostname)" admin@example.com < /tmp/inspect_alert.txt发简明摘要 - 避免邮件轰炸:加入“当日首次异常才通知”逻辑,用
touch /tmp/last_alert_$(date +\%Y\%m\%d)做轻量标记
结果可视化与回溯:本地化即够用
无需对接ELK或Grafana,也能做到有效追踪:
- 每次巡检生成HTML报告,含表格化数据+颜色标识(绿色正常/黄色预警/红色异常),直接用浏览器打开查看
- 所有历史报告按日期归档在
/var/www/html/inspect/下,Nginx简单配置即可对外只读浏览 - 提供
inspect-report -d 20240520这类简易命令行工具,快速拉取某日详情,省去翻日志成本
不复杂但容易忽略的是:脚本开头加set -e确保出错中断,所有路径用绝对路径,关键命令加超时(如timeout 10 df -hP防卡死)。一次写好,半年省心。










