Shell脚本通过调用lshw、smartctl、ipmitool、lm-sensors等系统工具监测CPU、内存、磁盘、温度及电源状态,基于/proc/stat和/proc/meminfo计算使用率,结合阈值告警与设备类型适配,支持--critical/--full模式输出,需root权限并校验依赖。

用 Shell 脚本监测服务器硬件状态,核心是调用系统自带工具(如 lshw、smartctl、ipmitool、lm-sensors)采集数据,并做简单判断和格式化输出。不需要额外安装复杂框架,轻量可靠,适合日常巡检或集成到监控流程中。
CPU 和内存使用率实时采集
Linux 的 /proc/stat 和 /proc/meminfo 是最稳定的数据源。脚本可通过计算两次采样间的差值获取 CPU 使用率,避免依赖 top 等交互式命令带来的解析麻烦。
- 读取
/proc/stat中第一行(cpu行),提取 user、nice、system、idle、iowait 等字段,用公式(total - idle) / total * 100计算瞬时使用率 - 从
/proc/meminfo提取MemTotal和MemAvailable,计算内存使用率:(MemTotal - MemAvailable) / MemTotal * 100 - 建议每 5 秒采样一次,连续 3 次超过阈值(如 CPU >90%、内存 >95%)才触发告警,减少误报
磁盘健康与空间预警
兼顾容量和物理健康:容量看 df,SMART 状态看 smartctl(需 root 权限且硬盘支持)。
- 用
df -P | awk '$5+0 > 90 {print $1, $5}'找出使用率超 90% 的挂载点 - 对关键磁盘(如
/dev/sda)运行smartctl -H /dev/sda,检查返回中是否含"PASSED";若为"FAILED"或命令执行失败,视为异常 - 注意 NVMe 盘需用
smartctl -a /dev/nvme0n1,参数略有不同,脚本中应按设备类型分支处理
温度与电源状态检查
服务器温度通常通过 lm-sensors 获取,电源/风扇状态则依赖 IPMI(常见于 Dell、HP、Supermicro 机型)。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 运行
sensors | awk '/^.*:.*\+[0-9]+\.?[0-9]*°C/ {print $1,$2}'提取带温度的传感器行,过滤掉crit或max字段,只留当前值 - 若系统支持 IPMI,可用
ipmitool sdr type Temperature和ipmitool sdr type Fan查看原始传感器数据;无响应时说明 IPMI 未启用或驱动缺失,也应记录为“IPMI 不可用” - 设定温度阈值(如 CPU 温度 >85°C、主板温度 >70°C)并标记为高危,避免仅依赖单个传感器误判
整合成可执行巡检脚本
把上述逻辑封装为一个带参数的脚本,例如 check_hw.sh --critical 只输出异常项,--full 输出全部指标,便于定时任务或人工核查。
- 开头加权限校验:
if [[ $EUID -ne 0 ]]; then echo "请用 root 运行"; exit 1; fi - 用
command -v检查依赖命令是否存在,缺失时提示安装方法(如apt install smartmontools lm-sensors ipmitool) - 所有输出带时间戳和主机名,方便日志归集:
echo "$(date '+%F %T') $(hostname): CPU ${cpu_pct}%..."
不复杂但容易忽略细节:权限、设备兼容性、阈值合理性、静默失败处理。写完先手动跑一遍,再放进 crontab 每小时执行,配合邮件或 webhook 推送关键告警即可落地。










