2

已搜索 SO 和 GNU 并行教程并在此处查看示例,但仍然不太了解我需要解决的问题。关于如何完成以下任务的任何提示:

我需要在多个远程服务器上调用相同的脚本,并使用不同的参数传递给每个服务器(参数是一个字符串),然后等到所有这些工作都完成......然后,在同一个远程服务器上运行相同的脚本多次服务器,但这次尽量让远程服务器保持忙碌(即当他们完成工作时,向他们发送另一个工作)。理想情况下,可以从将作业发送到远程服务器的“主”机器上的文件中读取字符串。

为了绘制此图,我尝试像这样运行 *my_script*:

  • 服务器 A: myscript 费用
  • 服务器 B: myscript fi

当这两项工作都完成后,我想做类似的事情:

  • 服务器 A: myscript fo
  • 服务器 B: myscript fum

...并假设 A 在服务器 B 之前完成了它的工作,立即向它发送下一个工作,例如:

  • 服务器 A: myscript chinesemun

... ETC

再次,非常感谢人们对 GNU 并行是否容易/困难的任何想法(或者如果其他类似 pdsh、集群 ssh 的东西可能更适合)。

蒂亚!

4

1 回答 1

2

看来我们可以将问题分为两部分:需要在所有服务器上运行的初始化部分和不关心在哪个服务器上运行的作业处理部分。

最后一部分是 GNU Parallel 的专长:

cat argfile | parallel -S serverA,serverB myscript

第一部分有点棘手:您希望前 k 个参数进入 k 个服务器。

head -n 2 argfile | parallel -j1 -S serverA,serverB myscript

问题在于,如果有大量服务器,那么 serverA 可能会在您到达最后一个服务器之前完成。在所有服务器上运行相同的作业要容易得多:

head -n 1 argfile | parallel --onall -S serverA,serverB myscript
于 2014-04-03T13:10:41.100 回答