告别人肉运维:实战导向的自动化脚本分享

在IT运维的日常工作中,重复性劳动往往占据了大量时间:清理磁盘、巡检服务器、批量更新配置……如果这些操作依然依赖人工逐台登录执行,不仅效率低下,且极易因“手滑”引发人为故障(俗称“从删库到跑路”)。

运维自动化的核心目的在于降本增效标准化操作。本文将分享两个在生产环境中经过检验的实用脚本,分别基于Shell与Python,帮助大家解决高频运维痛点。


实战脚本一:Shell - 智能日志清理与磁盘报警

在业务高峰期,日志文件往往会以惊人的速度膨胀,稍不留神就会将根分区撑满,导致服务宕机。手动清理不仅耗时,还容易误删正在写入的文件。以下脚本实现了按时间清理+磁盘阈值双重校验的安全清理机制。


#!/bin/bash
# 脚本名称: safe_log_cleaner.sh
# 功能: 清理指定目录下超过指定天数的日志,并在清理后检查磁盘空间,超限则触发报警

# ===== 配置区 =====
LOG_DIR="/var/log/app"
DAYS_TO_KEEP=7
DISK_USAGE_THRESHOLD=85
ALERT_EMAIL="ops-team@company.com"
# ==================

# 记录日志函数
log() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
}

# 判断目录是否存在
if [ ! -d "$LOG_DIR" ]; then
    log "ERROR: 目录 $LOG_DIR 不存在,退出。"
    exit 1
fi

log "开始清理 $LOG_DIR 目录下超过 $DAYS_TO_KEEP 天的日志..."

# 安全查找并删除:排除当前正在写入的活跃日志(如 .log 后缀且无日期的)
find "$LOG_DIR" -name "*.log.*" -type f -mtime +$DAYS_TO_KEEP -exec rm -f {} \;

log "旧日志清理完成,开始检查磁盘空间..."

# 获取当前根分区磁盘使用率(剥离%号)
CURRENT_USAGE=$(df -h / | awk 'NR==2{print $5}' | sed 's/%//g')

if [ "$CURRENT_USAGE" -gt "$DISK_USAGE_THRESHOLD" ]; then
    log "WARNING: 磁盘使用率已达 ${CURRENT_USAGE}%,超过阈值 ${DISK_USAGE_THRESHOLD}%!"
    # 触发邮件报警(需系统配置好mailx)
    echo "主机 $(hostname) 根分区使用率已达 ${CURRENT_USAGE}%,请立即处理!" | mail -s "【紧急】磁盘空间报警" $ALERT_EMAIL
else
    log "磁盘使用率正常: ${CURRENT_USAGE}%"
fi

log "脚本执行完毕。"