实用脚本能批量运维吗?

wen 实用脚本 19

本文目录导读:

实用脚本能批量运维吗?

  1. 第一层:最简单的批量操作(适合几十台机器)
  2. 第二层:集中管理与编配(适合上百台机器)
  3. 第三层:脚本 + 自动化平台(适合大规模、异构环境)
  4. 核心建议(如何判断用哪个?)
  5. 一个“实用脚本”必须注意的几个坑(避免踩雷)
  6. 总结一句话

能,而且这正是脚本的核心价值所在。

“批量运维”是脚本(尤其是 Shell、Python、PowerShell 脚本)最擅长解决的场景之一。

为了让你更清晰地理解,我把“实用脚本”在批量运维中的能力拆解为三个层次,你可以根据你的需求对号入座:

第一层:最简单的批量操作(适合几十台机器)

如果你有少量服务器,或者无需复杂的鉴权,可以用循环 + SSH 解决。

典型场景:在所有服务器上修改一个配置文件、查看磁盘空间、重启服务。

示例(Shell/Expect)

#!/bin/bash
# 定义一个服务器列表
SERVERS=("192.168.1.10" "192.168.1.11" "192.168.1.12")
USER="root"
COMMAND="df -h"
for SERVER in "${SERVERS[@]}"; do
    echo "=== 正在操作 $SERVER ==="
    ssh $USER@$SERVER "$COMMAND"
done

注意:这种方式需要提前配置 SSH 免密登录或使用 expect/sshpass 处理密码。

实用工具:可以用 pssh(Parallel SSH)代替手写循环,效率更高。

第二层:集中管理与编配(适合上百台机器)

当机器数量增多,或者需要处理复杂的依赖关系时,Ansible 是目前最主流的解决方案,它本质上是基于 Python 的脚本框架,但不需要在客户端安装 Agent。

典型场景:服务器初始化、部署应用、滚动更新、配置统一维护。

示例(Ansible Playbook)

---
- name: 批量配置 Nginx
  hosts: web_servers  # 在 inventory 中定义的主机组
  tasks:
    - name: 安装 Nginx
      yum:
        name: nginx
        state: present
    - name: 拷贝配置文件
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
    - name: 启动 Nginx
      service:
        name: nginx
        state: started
        enabled: yes

运行命令:ansible-playbook deploy_nginx.yml

优势:幂等性(重复执行不会产生副作用)、批量并行、错误处理成熟。

第三层:脚本 + 自动化平台(适合大规模、异构环境)

对于超过 1000 台或者跨云、跨机房的复杂环境,纯脚本会变得难以管理,这时通常会用脚本作为“原子能力”,配合自动化平台(如 SaltStackTerraformSpinnaker 或自研的 CMDB + 任务调度系统)。

典型场景:灰度发布、弹性伸缩、故障自愈、定期巡检。

示例(Python 脚本 + Redis 队列)

# 一个简单的批量任务分发脚本
import redis
import json
r = redis.Redis(host='queue_server')
# 向 Redis 队列推送任务
task = {
    'hosts': ['host1', 'host2'],
    'action': 'update_firewall',
    'params': {'rule': '...'}
}
r.lpush('ops_tasks', json.dumps(task))
# 各节点的 Agent 会从队列中取任务执行

核心建议(如何判断用哪个?)

  1. 如果你会 Bash

    • for 循环 + ssh 处理 10-20 台机器的临时任务(如排查问题)。
    • 推荐:配合 tmux + ssh-copy-id 使用,效率最高。
  2. 如果你想系统化地维护生产环境

    • 直接学 Ansible,它用 YAML 写(比 Bash 容易读),有现成的模块(如 filecopyyum),且能自动处理不同系统的差异。
    • 推荐:这是目前公司中最主流的“脚本式”批量运维工具。
  3. 如果是 Windows 环境

    • PowerShellInvoke-Command + -ComputerName 参数非常强大,原生支持批量远程执行,且自带 WinRM 传输。

一个“实用脚本”必须注意的几个坑(避免踩雷)

  • 并发控制:批量跑命令时,如果并发过多(50 台同时 yum install),可能把 YUM 仓库或 NFS 打挂,建议用 -P 参数限制并行数(如 pssh -P 5)。
  • 错误处理:脚本一定要有 set -e(Shell)或 try...except(Python),否则中间一台失败,后面的会继续乱跑。
  • 结果汇总:不要只输出到屏幕,脚本应该把结果写入一个文件(如 result.csv),方便后续 grep 或分析。
  • 幂等性:写脚本时,尽量确保重复执行不会导致错误,如果目录存在,就不创建”。

总结一句话

如果你想快速解决“临时、应急、少量”的批量工作,用 Bash + SSH 即可;如果你想做“可靠、可重复、可审计”的批量运维(生产环境),直接拥抱 Ansible(或类似工具),它本身就是一套成熟的“实用脚本体系”。

抱歉,评论功能暂时关闭!