用shell+cron可实现linux五大核心指标定时采集:cpu负载、内存真实占用率、关键磁盘空间、核心服务状态、近两小时系统异常;脚本分配置—采集—判断—输出四层,cron调度需防干扰并闭环告警。

在 Linux 系统中,定时采集 CPU 负载、内存真实占用率、关键磁盘空间、核心服务状态、近两小时系统异常这五大核心指标,不需要复杂平台,用 Shell + cron 就能稳定落地。关键是把“采集什么”“怎么判断”“何时告警”“结果存哪”四件事理清楚。
明确采集项与合理阈值
只抓真正影响业务的五类信号,避免无效轮询:
-
CPU 负载:用
uptime | awk '{print $10}' | sed 's/,//'取 5 分钟均值,阈值设为1.5 × $(nproc) -
内存真实占用率:基于
/proc/meminfo中MemAvailable计算,公式为(1 - MemAvailable / MemTotal) * 100,超 90% 触发提醒 -
关键挂载点磁盘空间:重点检查
/、/var、/home,用df -hP | awk '$5+0 > 95 {print $1, $5}'抓超限项 -
核心服务状态:对
sshd、nginx、mysql等逐个执行systemctl is-active --quiet 服务名 && echo ok || echo down -
近两小时系统级异常:运行
journalctl -S "2 hours ago" | grep -i "fail\|error\|oom\|killed",匹配即视为异常
写一个分层可维护的采集脚本
脚本结构按“配置—采集—判断—输出”分块,方便后续加指标或调阈值:
- 开头集中定义变量:
THRESHOLD_CPU=6、ALERT_EMAIL="admin@example.com"、LOG_DIR="/var/log/inspect" - 每个指标封装成函数,如
check_disk()返回 0(正常)或 1(异常),便于单独测试 - 主流程只做调度:依次调用各函数,记录时间戳,生成带颜色标识的 HTML 报告(可用
echo "<span style="color:red">ALERT</span>"实现) - 同时保存原始命令输出到独立日志文件,例如
/var/log/inspect/20260925_0600_raw.log,供回溯定位
用 cron 可靠调度并防干扰
定时不是简单加一行 crontab,要补足生产环境细节:
- 推荐每日固定时间执行一次深度巡检,例如:
0 6 * * * /opt/scripts/inspect.sh >> /var/log/inspect/cron.log 2>&1 - 脚本开头加
set -e,任一命令失败立即退出;加umask 022确保日志文件权限可控 - 避免 cron 环境变量缺失:在脚本里显式设置
PATH=/usr/local/bin:/usr/bin:/bin - 防重复告警:用
touch /tmp/last_alert_$(date +\%Y\%m\%d)标记当日首次告警,同一天不再发邮件
结果归档与轻量告警联动
采集完不存不看等于没采,需闭环处理:
- HTML 报告按日期命名,自动保留最近 7 天,旧报告用
find /var/log/inspect -name "*.html" -mtime +7 -delete清理 - 仅当检测到异常时才触发告警:邮件标题含主机名和异常类型,正文附当前值与阈值对比,例如
/var is 96% full (threshold: 95%) - 本地日志同步写入
syslog:logger -t inspect "DISK_WARN: /var at 96%",确保即使邮件通道失效也有痕迹 - 中心归集可选 rsync:每天凌晨用
rsync --delete-after /var/log/inspect/ user@center:/data/inspect/$(hostname)/汇总多机数据











