./myscript.sh start all-pair new-rules 或

./myscript.sh start all-pair new-rules 或

请先仔细阅读问题,然后给出解决方案...................

目录中有 3 个文件

  1. myscript.sh(myscript.sh 文件包含许多函数,可以从 serverlist.txt 文件启动/停止所有对/单对,例如

对于 start() 函数:它检查 arg2 是否是全对还是单 IP 对,然后启动它。

对于 stop() 函数:它检查 arg2 是否是全对还是单 IP 对,然后停止它。

对于 rules() 函数:它检查 arg3 是否是新规则或相同规则,然后复制它

对于 put_files() 函数:它与 arg2 一起使用,并检查 arg2 是否是全对还是单 IP 对

like:  ./myscript.sh put_files all-pair
or ./myscript.sh put_files 192.168.20.13-192.168.20.21

2. deploy_function 文件:deploymet_function 文件从 server_list.txt 文件以 PAIR 的形式获取 IP-Pair。

  1. 服务器列表.txt

server_list.txt 以 IP 对(C++ 服务器-数据库服务器)的形式包含主机 ip,如下所示。

192.168.20.13-192.168.20.21
192.168.20.22-192.168.20.34 192.168.20.42-192.168.20.45

我的脚本的基本语法:

./myscript.sh 参数1 参数2 参数3

其中,arg1=start 或 stop 或 put-files

arg2=all-pair 或单个 ip 对

arg3=new-rules 或 same-rules

我们通过以下方式执行脚本.....

./myscript.sh start all-pair new-rules 或

./myscript.sh 启动 192.168.20.13-192.168.20.21 新规则

./myscript.sh 停止所有对或

./myscript.sh停止192.168.20.13-192.168.20.21

问题: 实际上,它执行得很好,但是在所有的 IP 对上执行需要更多的时间,因为它是串行执行的。首先它转到 192.168.20.21,然后是 192.168.20.13,然后是 192.168.20.34 和 192.168.20.22.....当它出现错误时它就在该服务器上停止。并且不再在其余的 IP 对上进一步执行。

我想在所有服务器上并行执行 myscript,如果出现错误,则列出该服务器并进一步执行。因此,有没有什么解决方案可以让我并行执行相同的脚本而无需更改 myscript。所以请帮我找出正确的方法来做到这一点......

答案1

您可以尝试使用 pdsh(并行分布式 Shell)。Pdsh 是一个高效的多线程远程 Shell 客户端,它可以并行在多个远程主机上执行命令。虽然它已经很久没有更新了,但当我在 700 台机器上运行脚本时,它仍然运行良好。

韋斯

相关内容