本文目录导读:

- 第一层:最简单的批量操作(适合几十台机器)
- 第二层:集中管理与编配(适合上百台机器)
- 第三层:脚本 + 自动化平台(适合大规模、异构环境)
- 核心建议(如何判断用哪个?)
- 一个“实用脚本”必须注意的几个坑(避免踩雷)
- 总结一句话
能,而且这正是脚本的核心价值所在。
“批量运维”是脚本(尤其是 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 台或者跨云、跨机房的复杂环境,纯脚本会变得难以管理,这时通常会用脚本作为“原子能力”,配合自动化平台(如 SaltStack、Terraform、Spinnaker 或自研的 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 会从队列中取任务执行
核心建议(如何判断用哪个?)
-
如果你会 Bash:
- 用
for 循环+ssh处理 10-20 台机器的临时任务(如排查问题)。 - 推荐:配合
tmux+ssh-copy-id使用,效率最高。
- 用
-
如果你想系统化地维护生产环境:
- 直接学 Ansible,它用 YAML 写(比 Bash 容易读),有现成的模块(如
file、copy、yum),且能自动处理不同系统的差异。 - 推荐:这是目前公司中最主流的“脚本式”批量运维工具。
- 直接学 Ansible,它用 YAML 写(比 Bash 容易读),有现成的模块(如
-
如果是 Windows 环境:
- PowerShell 的 Invoke-Command + -ComputerName 参数非常强大,原生支持批量远程执行,且自带 WinRM 传输。
一个“实用脚本”必须注意的几个坑(避免踩雷)
- 并发控制:批量跑命令时,如果并发过多(50 台同时
yum install),可能把 YUM 仓库或 NFS 打挂,建议用-P参数限制并行数(如pssh -P 5)。 - 错误处理:脚本一定要有
set -e(Shell)或try...except(Python),否则中间一台失败,后面的会继续乱跑。 - 结果汇总:不要只输出到屏幕,脚本应该把结果写入一个文件(如
result.csv),方便后续 grep 或分析。 - 幂等性:写脚本时,尽量确保重复执行不会导致错误,如果目录存在,就不创建”。
总结一句话
如果你想快速解决“临时、应急、少量”的批量工作,用 Bash + SSH 即可;如果你想做“可靠、可重复、可审计”的批量运维(生产环境),直接拥抱 Ansible(或类似工具),它本身就是一套成熟的“实用脚本体系”。