每日备份 2026-06-10 12:57:13
This commit is contained in:
1 parent
fda2ccb8c2
commit
3d2e638c6a
244 files changed
+58890
-3
No files matched your search
Executable
+54
@@ -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
|
||||
Reference in new issue
Block a user