并行运行多台机器中的脚本

时间:2013-06-09 03:52:26

标签: bash gnu gnu-parallel

我很想知道尽可能快地在多台计算机的后台启动脚本的最佳方法。目前我正在这样做

为每个IP地址运行 ssh user @ ip -t“perl~ / setup.pl>&〜/ log&” &安培;

但是这需要时间,因为它单独尝试通过SSH连接到每个人以在该计算机的后台启动setup.pl。这需要时间,因为我有大量的机器来启动此脚本。

我尝试使用GNU parallel,但无法使其正常工作:

seq COUNT | parallel -j 1 -u -S ip1,ip2,... perl~ / setup.pl>& 〜/登录

但它似乎没有用,我看到脚本在目标机器上由GNU并行启动,但它停滞不前。我在日志中看不到任何内容。

使用GNU并行时我做错了什么

3 个答案:

答案 0 :(得分:3)

GNU Parallel假定默认情况下它运行作业的机器并不重要 - 这对于计算通常是正确的。在你的情况下,它非常重要:你想在每台机器上找一份工作。 GNU Parallel也会给一个数字作为setup.pl的参数,你显然不希望这样。

幸运的是GNU Parallel 使用支持你想要的东西

http://www.gnu.org/software/parallel/man.html#example__running_the_same_command_on_remote_computers

我鼓励您阅读并理解其余的例子。

答案 1 :(得分:2)

我建议您使用pdsh

它允许您在多台计算机上运行相同的命令

用法:

pdsh -w machine1,machine2,...,machineN <command>

它可能不包含在你的Linux发行版中,所以通过yum或apt

获取它

答案 2 :(得分:0)

尝试将ssh user@ip -t "perl ~/setup.pl >& ~/log &" &包装在shell脚本中,并针对每个IP地址运行./mysctipt.sh &