![如何在10台主机上同时运行shell脚本?](https://linux22.com/image/88136/%E5%A6%82%E4%BD%95%E5%9C%A810%E5%8F%B0%E4%B8%BB%E6%9C%BA%E4%B8%8A%E5%90%8C%E6%97%B6%E8%BF%90%E8%A1%8Cshell%E8%84%9A%E6%9C%AC%EF%BC%9F%20.png)
目前我正在监控 10 台主机。我想编写一个脚本,每 24 小时计算一次磁盘空间,然后如果主机的文件系统对任何主机都至关重要,那么它会将旧文件从该主机移动到具有最大磁盘空间的主机?
答案1
存在并行 ssh 包装器——以下是我在 CentOS7/EPEL 上发现的一些:
名称:pssh 仓库:epel/x86_64 摘要:并行 SSH 工具 网址:http://code.google.com/p/parallel-ssh/ 许可证:BSD 说明:该软件包提供了基于 ssh 和 scp 的各种并行工具。 :并行版本包括: : o ssh : pssh : o scp : pscp : 哦 核弹 : pnuke : 或 rsync : prsync :o 咕噜咕噜 : 咕噜咕噜 姓名 : pdsh 仓库:epel/x86_64 摘要:并行远程shell程序 网址:https://pdsh.googlecode.com/ 许可证:GPLv2+ 描述 : Pdsh 是一个执行命令的多线程远程 shell 客户端 :在多个远程主机上并行。 Pdsh 可以使用几种不同的 :远程 shell 服务,包括标准“rsh”、Kerberos IV 和 ssh。 姓名 : mpssh 仓库:epel/x86_64 摘要:并行ssh工具 网址:https://github.com/ndenev/mpssh 许可证:BSD 描述:mpssh 是一个并行 ssh 工具。它的作用是连接到许多主机 :在hosts文件中指定并在所有主机上执行相同的命令
因此,您可以使用该脚本通过 ssh 查询远程系统以获取其磁盘空间,然后评估要清理哪些系统以及将哪些系统用作目标。
答案2
这将在指定的主机列表上并行运行脚本:
declare -a CLEANUP
for host in host1.example.com host2.example.com; do # the list can be as long as you need
OUTPUT="/tmp/${host}.out"
ssh "$host" '/path/to/script' > "$OUTPUT" &
CLEANUP+=("$OUTPUT")
done
trap 'rm -fr "${OUTPUT[@]}"' EXIT
# How to parse the output files is an exercise I leave to you