针对无 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