如何在所有远程服务器上并行执行带有args的bash脚本(如果从远程服务器中的远程服务器)

请仔细阅读问题,然后给予解决scheme …………….

我们在目录中有3个文件

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

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

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

对于rules()函数:它检查arg3是否是new-rules或者same-rules然后拷贝它

对于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. deployment_function文件:deploymet_function文件以pair的forms从server_list.txt文件中获取IP-Pair。

  1. server_list.txt

server_list.txt的conatin会以IP-Pair(C ++ Server-数据库服务器)的forms主机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 arg1 arg2 arg3

其中,arg1 =开始或停止或放置文件

arg2 =全双或单个ip对

arg3 =新规则或相同的规则

我们正在执行我们的脚本在以下几个方面…..

./myscript.sh启动所有对新规则

./myscript.sh start 192.168.20.13-192.168.20.21新规则

./myscript.sh停止所有对或

./myscript.sh stop 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,如果出现错误,然后列出该服务器并执行furtur。 所以有没有任何解决scheme,我可以并行执行相同的脚本,而不用改变myscript。 所以请帮我找出正确的方法来做到这一点….

你可以尝试使用pdsh(Parallel Distributed Shell)。 Pdsh是一个高效的multithreading远程shell客户端,它在多个远程主机上并行执行命令。 虽然在一段时间内还没有更新,但是当我在700台机器上运行脚本时,它仍然很好用。

PDSH