返回首页

运维自动化脚本 5 件套 — 健康巡检/日志告警/MySQL备份/批量执行/服务守护

📅 创建于 2026-05-20 🔄 更新于 2026-05-20 📝 488 字

运维自动化脚本 5 件套 — 健康巡检/日志告警/MySQL备份/批量执行/服务守护

来源:四海风闻 | 2026-05-17

5 个即用型运维自动化脚本,覆盖服务器健康巡检、日志异常告警、MySQL 自动备份、批量命令执行和服务守护,可独立部署到生产环境。

脚本 1:服务器健康巡检一键生成报告

#!/bin/bash
# health_check.sh - 服务器健康巡检脚本
echo "=== 服务器健康巡检报告 ==="
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "主机: $(hostname)"
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
echo "CPU使用率: ${cpu_usage}%"
mem_info=$(free -m | grep "Mem:")
mem_total=$(echo $mem_info | awk '{print $2}')
mem_used=$(echo $mem_info | awk '{print $3}')
mem_percent=$((mem_used * 100 / mem_total))
echo "内存使用: ${mem_used}MB / ${mem_total}MB (${mem_percent}%)"
df -h | grep -E "^/dev" | awk '{print $1, $5, $6}'
for svc in nginx mysql redis; do
  if systemctl is-active --quiet $svc; then echo "✓ $svc"; else echo "✗ $svc"; fi
done

应用场景: 每天早上 8 点 cron 执行,产出报告推送至钉钉群。替代手动 SSH 巡检(1 小时 → 10 秒)。

参见 server-performance-four-dimensions — 全面的五维性能排查方法论和告警阈值

脚本 2:日志异常自动告警

#!/bin/bash
LOG_FILE="/var/log/nginx/error.log"
ALERT_WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=***"
KEYWORDS="error|exception|timeout|failed"
errors=$(tail -n 1000 "$LOG_FILE" | grep -iE "$KEYWORDS" | tail -n 10)
if [ -n "$errors" ]; then
  curl -s -X POST "$ALERT_WEBHOOK" -H 'Content-Type: application/json' \
    -d '{"msgtype":"text","text":{"content":"⚠️ 日志异常告警\n主机: '$(hostname)'\n'"$errors"'"}}'
fi

配合 */5 * * * * /opt/scripts/log_alert.sh 每 5 分钟执行一次。

参见 nginx-502-504-connection-reset-guide — Nginx 错误日志深度排查

脚本 3:自动备份 MySQL 数据库

#!/bin/bash
BACKUP_DIR="/data/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
DB_USER="backup_user"
DB_PASS="your_password"
DATABASES="user_db order_db product_db"
mkdir -p "$BACKUP_DIR"
for db in $DATABASES; do
  mysqldump -u"$DB_USER" -p"$DB_PASS" "$db" | gzip > "$BACKUP_DIR/${db}_${DATE}.sql.gz"
done
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete

要点: 每天凌晨 2 点执行,保留 7 天备份。

参见 mysql-performance-config — MySQL 性能调优与配置

脚本 4:批量服务器命令执行

#!/usr/bin/env python3
import paramiko, concurrent.futures
servers = [
    {"host": "192.168.1.10", "user": "root", "key": "/root/.ssh/id_rsa"},
    {"host": "192.168.1.11", "user": "root", "key": "/root/.ssh/id_rsa"},
]
def run_command(server, cmd):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(server["host"], username=server["user"], key_filename=server["key"])
    stdin, stdout, stderr = ssh.exec_command(cmd)
    return server["host"], stdout.read().decode()
def batch_execute(command):
    with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
        futures = [executor.submit(run_command, s, command) for s in servers]
        for future in concurrent.futures.as_completed(futures):
            host, output = future.result()
            print(f"[{host}]\n{output}")
if __name__ == "__main__":
    batch_execute("uptime && free -h")

优势: 并行批量执行,替代逐个 SSH 登录。

脚本 5:服务自动重启守护

#!/bin/bash
SERVICES="nginx php-fpm mysql"
WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=***"
for svc in $SERVICES; do
  if ! systemctl is-active --quiet "$svc"; then
    echo "$(date) - $svc 已停止,正在重启..."
    systemctl restart "$svc"
    if systemctl is-active --quiet "$svc"; then
      curl -s -X POST "$WEBHOOK" -H 'Content-Type: application/json' \
        -d '{"text":{"content":"✅ '"$svc"' 重启成功"}}'
    else
      curl -s -X POST "$WEBHOOK" -H 'Content-Type: application/json' \
        -d '{"text":{"content":"❌ '"$svc"' 重启失败,请人工介入"}}'
    fi
  fi
done

配合 * * * * * /opt/scripts/service_guard.sh 每分钟检查一次。

综合建议

  • 从最痛的点开始(巡检或备份),跑起来再迭代
  • 所有脚本配合钉钉/飞书机器人通知,实现告警闭环
  • 配合 online-troubleshooting-checklist 使用,覆盖日常运维+应急排障

关联页面

页面 关联点
server-performance-four-dimensions 五维排查框架 + 告警阈值(脚本 1 健康巡检的深度参考)
online-troubleshooting-checklist 四维排查速查(自动化脚本 + 应急排障互补)
mysql-performance-config MySQL 性能调优(脚本 3 备份的上下文)
nginx-502-504-connection-reset-guide Nginx 错误日志深度排查(脚本 2 日志告警的上下文)
linux-server-load-case-study 服务器负载排查案例(脚本 1 巡检的实战延伸)
terraform-production-guide Terraform IaC 实战(自动化脚本 + IaC 互补:脚本 vs 声明式基础设施)
nginx-log-analysis-monitoring-guide Nginx 日志分析与监控体系构建指南 — 自定义日志格式、性能分析技巧、GoAccess 可视化、
linux-batch-rename-guide Linux 批量重命名指南 — rename/prename 8 大场景实战(替换字符/改后缀/加前
fullstack-performance-troubleshooting 全栈性能排障入口(脚本 1-5 的排障背景)