知易网
白蓝主题五 · 清爽阅读
首页  > 硬件维护

用shell命令条件判断轻松搞定硬件维护任务

在日常服务器或工作站维护中,经常需要根据硬件状态决定下一步操作。比如磁盘快满了要报警,内存使用过高要记录日志。这些自动化判断,靠手动查看太累,用shell脚本里的条件判断就能自动完成。

文件和目录是否存在判断

比如你想定期检查某个监控日志是否存在,避免程序没启动。可以用 -f 判断文件,-d 判断目录:

if [ -f "/var/log/hardware_monitor.log" ]; then
    echo "日志正常生成"
else
    echo "警告:日志文件缺失!"
fi

如果某台机器的 /tmp 目录突然不见了(虽然少见),可以用下面的方式检测:

if [ ! -d "/tmp" ]; then
    mkdir /tmp
    echo "/tmp 目录已重建"
fi

磁盘使用率超过阈值自动提醒

这是实际工作中最常用的场景之一。写个脚本定期检查根分区,超过90%就提示:

usage=$(df / | grep "/" | awk '{print $5}' | sed 's/%//')
if [ $usage -gt 90 ]; then
    echo "警告:根分区使用率 $usage%"
fi

这种脚本能放在 cron 里每小时跑一次,省得天天手动 df 查看。

比较数值大小做决策

有时候要判断剩余内存够不够。比如你想确认空闲内存是否低于512MB:

free_mem=$(free -m | grep "^Mem" | awk '{print $7}')
if [ $free_mem -lt 512 ]; then
    echo "内存紧张,当前可用 $free_mem MB"
fi

注意这里用的是 -lt(小于),如果是大于用 -gt,等于用 -eq,这些都是整数比较常用的操作符。

组合条件更灵活

实际环境中往往需要多个条件一起判断。比如:只有在是周一且系统负载低于3时才执行备份:

day=$(date +%u)  # 周一为1
load=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | sed 's/,//')

if [ $day -eq 1 ] && [ $(echo "$load < 3" | bc) -eq 1 ]; then
    echo "开始每周一备份"
    # 执行备份命令
fi

这里的 && 表示“并且”,也可以用 || 表示“或者”,逻辑清晰,写起来也顺手。

设备文件是否存在判断硬件状态

有些老式硬件通过设备文件暴露状态。比如检查是否有GPU设备:

if [ -c "/dev/nvidia0" ]; then
    echo "NVIDIA显卡在线"
else
    echo "未检测到NVIDIA显卡"
fi

这种判断在批量部署图形工作站时特别有用,脚本能自动识别设备情况。

把这些小判断串起来,一个简单的硬件健康检查脚本就有了。不需要复杂工具,几行 shell 命令加点条件逻辑,就能让运维工作轻松不少。