linux资源巡检脚本通过解耦采集逻辑与格式化输出,用section函数分隔模块、log_result函数统一打印(含时间戳、着色、双写日志),各check_*函数专注数据采集与状态判断,支持阈值告警、静默模式及调试输出。

Linux 中封装系统资源巡检的打印函数,核心是把“采集逻辑”和“格式化输出”解耦,让每个检查项专注获取数据,而统一的打印函数负责加时间戳、对齐、着色、写入报告文件——既保持脚本可读性,又便于维护和复用。
定义统一打印函数(带时间戳+日志双写)
用 section 函数做模块分隔,用 log_result 输出具体条目:
- section "CPU 使用率":打印带当前时间的标题行和分隔线,自动追加到报告文件
- log_result "CPU" "92%" "WARN":按固定格式输出 [09:45:22] CPU: 92% (WARN),同时写入终端和报告
示例实现:
section() {
echo "[$(date '+%H:%M:%S')] $1" | tee -a "$REPORT_FILE"
echo "-------------------------------------" | tee -a "$REPORT_FILE"
}
log_result() {
local module=$1 value=$2 status=${3:-OK}
local color="\033[0m"
[[ $status == "WARN" ]] && color="\033[0;33m"
[[ $status == "CRIT" ]] && color="\033[0;31m"
printf "${color}[%s] %s: %s (%s)\033[0m\n" "$(date '+%H:%M:%S')" "$module" "$value" "$status" | tee -a "$REPORT_FILE"
}
每个资源检查封装成独立函数(只返回原始值或状态)
不混入输出逻辑,只做采集和判断,返回标准码(0=正常,1=告警),由调用方决定怎么打日志:
-
check_cpu_usage:用
mpstat 1 1 | awk '/Average:/ {print 100-$NF}'算使用率,return 1若超阈值 -
check_disk_root:用
df / | awk 'NR==2 {gsub(/%/,"",$5); print $5}'提取百分比,再比较 -
check_mem_avail:用
free -m | awk '/Mem:/ {print $7}'取可用内存 MB 数
这样后续替换采集方式(比如改用 /proc/stat)不影响输出结构。
组合调用:先检查,再统一打印
主流程里按模块组织,清晰体现“查什么→怎么判→怎么报”:
section "CPU 使用率"
cpu_pct=$(check_cpu_usage)
if [[ $cpu_pct -gt $CPU_ALERT_THRESHOLD ]]; then
log_result "CPU" "${cpu_pct}%" "WARN"
else
log_result "CPU" "${cpu_pct}%" "OK"
fi
section "根分区磁盘"
disk_pct=$(check_disk_root)
[[ $disk_pct -gt $DISK_ALERT_THRESHOLD ]] && log_result "Disk /" "${disk_pct}%" "WARN" || log_result "Disk /" "${disk_pct}%" "OK"
支持静默模式与调试输出
加个开关变量 VERBOSE,方便开发时看原始命令输出:
-
VERBOSE=1 时,每个检查函数末尾加
[[ $VERBOSE ]] && echo "DEBUG: raw output = $raw" >&2 - 生产运行设
VERBOSE=0,不干扰报告格式
避免把调试信息直接塞进 log_result,保持其职责单一。











