Appearance
自动化脚本
日常工作中常用的自动化脚本
概述
本文档收集了技术支持工作中常用的自动化脚本,包括日常巡检、数据备份、环境检查等。
日常巡检脚本
系统资源检查
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