针对无 Python/Ansible 环境的服务器,利用纯原生 Bash 编写带文件锁(flock)、并发防重与日志切分的生产级巡检及备份脚本。
一、 工业级自动化巡检脚本 (sys_health_check.sh)
#!/usr/bin/env bash
set -euo pipefail
LOCKFILE="/var/run/sys_health.lock"
exec 200>"$LOCKFILE"
flock -n 200 || { echo "[ERROR] 脚本正在运行中,退出。"; exit 1; }
LOG_FILE="/var/log/sys_health_$(date +%Y%m).log"
exec >> "$LOG_FILE" 2>&1
CPU_THRESHOLD=85
MEM_THRESHOLD=90
DISK_THRESHOLD=85
log_msg() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
check_metrics() {
log_msg "--- 开始系统状态巡检 ---"
# CPU 使用率计算
local cpu_idle
cpu_idle=$(top -bn1 | grep "Cpu(s)" | awk -F',' '{print $4}' | awk '{print $1}')
local cpu_usage
cpu_usage=$(awk "BEGIN {print 100 - $cpu_idle}")
# 内存使用率计算
local mem_usage
mem_usage=$(free | awk '/Mem:/{printf("%.2f"), $3/$2*100}')
# 根分区使用率
local disk_usage
disk_usage=$(df -h / | awk 'NR==2{print $5}' | tr -d '%')
log_msg "CPU 使用率: ${cpu_usage}%, 内存: ${mem_usage}%, 磁盘: ${disk_usage}%"
if (( $(echo "$disk_usage > $DISK_THRESHOLD" | bc -l) )); then
log_msg "[ALERT] 磁盘容量超标: ${disk_usage}%"
fi
}
check_metrics