Skip to content

自动化脚本

日常工作中常用的自动化脚本

概述

本文档收集了技术支持工作中常用的自动化脚本,包括日常巡检、数据备份、环境检查等。

日常巡检脚本

系统资源检查

bash
#!/bin/bash
# check_system.sh - 系统资源检查脚本

echo "========== 系统资源检查 =========="
echo "检查时间: $(date)"
echo ""

# CPU 使用率
echo "--- CPU 使用率 ---"
top -bn1 | grep "Cpu(s)" | awk '{print "CPU 使用率: " $2}'

# 内存使用率
echo ""
echo "--- 内存使用率 ---"
free -h | grep Mem | awk '{print "内存使用率: " int($3/$2*100) "%"}'

# 磁盘使用率
echo ""
echo "--- 磁盘使用率 ---"
df -h | grep -E "^/dev" | awk '{print $1 " " $5 " " $6}'

# 负载
echo ""
echo "--- 系统负载 ---"
uptime | awk '{print "系统负载: " $10 $11 $12}'

echo ""
echo "========== 检查完成 =========="

服务状态检查

bash
#!/bin/bash
# check_services.sh - 服务状态检查脚本

SERVICES=("nginx" "mysql" "redis" "app-service")

echo "========== 服务状态检查 =========="
echo "检查时间: $(date)"
echo ""

for service in "${SERVICES[@]}"; do
    status=$(systemctl is-active "$service" 2>/dev/null)
    if [ "$status" = "active" ]; then
        echo "✅ $service: 运行中"
    else
        echo "❌ $service: 未运行"
    fi
done

echo ""
echo "========== 检查完成 =========="

数据备份脚本

数据库备份

bash
#!/bin/bash
# backup_db.sh - 数据库备份脚本

DB_NAME="your_database"
DB_USER="your_user"
DB_PASS="your_password"
BACKUP_DIR="/backup/db"
DATE=$(date +%Y%m%d_%H%M%S)

echo "========== 数据库备份 =========="
echo "备份时间: $(date)"
echo "数据库: $DB_NAME"
echo ""

# 创建备份目录
mkdir -p "$BACKUP_DIR"

# 执行备份
mysqldump -u "$DB_USER" -p"$DB_PASS" \
    --single-transaction \
    --routines \
    --triggers \
    "$DB_NAME" > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql"

# 压缩备份文件
gzip "$BACKUP_DIR/${DB_NAME}_${DATE}.sql"

# 删除 7 天前的备份
find "$BACKUP_DIR" -name "${DB_NAME}_*.sql.gz" -mtime +7 -delete

echo ""
echo "备份完成: $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"
echo "========== 备份结束 =========="

日志备份

bash
#!/bin/bash
# backup_logs.sh - 日志备份脚本

LOG_DIR="/var/log/app"
BACKUP_DIR="/backup/logs"
DATE=$(date +%Y%m%d)

echo "========== 日志备份 =========="
echo "备份时间: $(date)"
echo ""

# 创建备份目录
mkdir -p "$BACKUP_DIR/$DATE"

# 压缩昨天的日志
find "$LOG_DIR" -name "*.log" -mtime +1 -exec gzip {} \;

# 移动压缩后的日志
find "$LOG_DIR" -name "*.log.gz" -exec mv {} "$BACKUP_DIR/$DATE/" \;

# 删除 30 天前的备份
find "$BACKUP_DIR" -type d -mtime +30 -exec rm -rf {} \;

echo ""
echo "备份完成: $BACKUP_DIR/$DATE/"
echo "========== 备份结束 =========="

环境检查脚本

部署前检查

bash
#!/bin/bash
# check_env.sh - 部署前环境检查脚本

echo "========== 环境检查 =========="
echo "检查时间: $(date)"
echo ""

# 检查必要命令
echo "--- 检查必要命令 ---"
commands=("docker" "docker-compose" "git" "curl")
for cmd in "${commands[@]}"; do
    if command -v "$cmd" &> /dev/null; then
        echo "✅ $cmd: 已安装"
    else
        echo "❌ $cmd: 未安装"
    fi
done

# 检查端口
echo ""
echo "--- 检查端口占用 ---"
ports=(80 443 3306 6379 8080)
for port in "${ports[@]}"; do
    if lsof -Pi ":$port" -sTCP:LISTEN -t >/dev/null ; then
        echo "⚠️  端口 $port: 已被占用"
    else
        echo "✅ 端口 $port: 可用"
    fi
done

# 检查磁盘空间
echo ""
echo "--- 检查磁盘空间 ---"
df -h | awk 'NR==1 || int($5) > 80 {print $0}'

echo ""
echo "========== 检查完成 =========="

日志分析脚本

错误日志统计

bash
#!/bin/bash
# analyze_errors.sh - 错误日志分析脚本

LOG_FILE="/var/log/app/error.log"
OUTPUT_FILE="/tmp/error_analysis_$(date +%Y%m%d).txt"

echo "========== 错误日志分析 =========="
echo "分析时间: $(date)"
echo "日志文件: $LOG_FILE"
echo ""

# 统计错误数量
echo "--- 错误数量统计 ---"
grep -c "ERROR" "$LOG_FILE"

# 统计各类错误
echo ""
echo "--- 错误类型分布 ---"
grep "ERROR" "$LOG_FILE" | \
    sed 's/.*ERROR \([^:]*\).*/\1/' | \
    sort | uniq -c | sort -rn | head -20

# 保存到文件
{
    echo "========== 错误日志分析报告 =========="
    echo "生成时间: $(date)"
    echo ""
    echo "--- 错误类型分布 ---"
    grep "ERROR" "$LOG_FILE" | \
        sed 's/.*ERROR \([^:]*\).*/\1/' | \
        sort | uniq -c | sort -rn
} > "$OUTPUT_FILE"

echo ""
echo "报告已保存: $OUTPUT_FILE"
echo "========== 分析完成 =========="

使用说明

添加定时任务

bash
# 编辑 crontab
crontab -e

# 添加以下任务
# 每天凌晨 2 点执行系统巡检
0 2 * * * /path/to/check_system.sh >> /var/log/check_system.log 2>&1

# 每天凌晨 3 点执行数据库备份
0 3 * * * /path/to/backup_db.sh >> /var/log/backup_db.log 2>&1

# 每周一执行日志备份
0 4 * * 1 /path/to/backup_logs.sh >> /var/log/backup_logs.log 2>&1

脚本权限设置

bash
# 添加执行权限
chmod +x /path/to/*.sh

# 设置属主和权限
chown root:root /path/to/*.sh
chmod 755 /path/to/*.sh

相关文档

数字化发展中心 · IT共享服务中心