每日备份 2026-06-10 12:57:13

This commit is contained in:
root-backup committed 2026-06-10 12:57:14 +08:00
1 parent fda2ccb8c2
commit 3d2e638c6a
244 files changed
+58890 -3

No files matched your search

+54
View File
@@ -0,0 +1,54 @@
#!/bin/bash
# 资源守卫 - 执行前检查机器资源
THRESHOLD_MEM=80
THRESHOLD_LOAD=1.5
MIN_DISK_GB=5
MIN_MEM_AVAILABLE_GB=1
LOG_DIR="/var/log/openclaw"
RESOURCE_LOG="${LOG_DIR}/resource-guard.log"
check_resources() {
local cpu_usage load_5min num_cores normalized_load mem_total mem_available mem_pct disk_free exit_code=0
load_5min=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $2}' | sed 's/,//')
num_cores=$(nproc)
normalized_load=$(echo "scale=2; $load_5min / $num_cores" | bc 2>/dev/null || echo "99")
# 可靠提取Mem行
local mem_info
mem_info=$(free -m | awk 'NR==2{print $2, $3, $4, $7}')
mem_total=$(echo "$mem_info" | awk '{print $1}')
mem_available=$(echo "$mem_info" | awk '{print $4}')
mem_pct=$(( (mem_total - mem_available) * 100 / mem_total ))
disk_free=$(df -BG / | tail -1 | awk '{print $4}' | tr -d 'G')
echo "[资源] 负载:${load_5min}(归一化:${normalized_load}) 内存:${mem_pct}% 可用:${mem_available}MB 磁盘:${disk_free}GB"
(( $(echo "$normalized_load > $THRESHOLD_LOAD" | bc -l 2>/dev/null) )) && echo "⚠️ 负载(${load_5min})>阈值(${THRESHOLD_LOAD}x$num_cores核)" && exit_code=1
[ "$mem_pct" -gt "$THRESHOLD_MEM" ] && echo "⚠️ 内存(${mem_pct}%)>${THRESHOLD_MEM}%" && exit_code=1
[ "$mem_available" -lt $((MIN_MEM_AVAILABLE_GB * 1024)) ] && echo "⚠️ 可用内存(${mem_available}MB)<${MIN_MEM_AVAILABLE_GB}GB" && exit_code=1
[ "$disk_free" -lt "$MIN_DISK_GB" ] && echo "⚠️ 磁盘(${disk_free}GB)<${MIN_DISK_GB}GB" && exit_code=1
[ "$exit_code" -eq 0 ] && echo "✅ 资源检查通过" || echo "❌ 资源不足"
# 写入日志(无论通过与否)
mkdir -p "$LOG_DIR"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] load=${load_5min}(norm=${normalized_load}) mem=${mem_pct}% avail=${mem_available}MB disk=${disk_free}GB -> $([ $exit_code -eq 0 ] && echo PASS || echo FAIL)" >> "$RESOURCE_LOG"
return $exit_code
}
case "$1" in
--check) check_resources ;;
*)
if check_resources; then
eval "$*"
else
echo "跳过: $*"
exit 1
fi
;;
esac