请先仔细阅读问题,然后给出解决方案...................
目录中有 3 个文件
- 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。
- 服务器列表.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 台机器上运行脚本时,它仍然运行良好。