如何在10台主机上同时运行shell脚本?

如何在10台主机上同时运行shell脚本?

目前我正在监控 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

相关内容