搜索了SO和GNU并行教程,并通过了示例here,但仍然没有看到我需要解决的问题。有关如何完成以下任务的任何提示:
我需要在几个远程服务器上调用相同的脚本,并且每个远程服务器都传递一个不同的参数(参数是一个字符串),然后等待所有这些作业完成...然后,再次运行相同的脚本那些相同的远程服务器,但这次尝试让远程服务器尽可能地忙(即当他们完成工作时,向他们发送另一份工作)。理想情况下,字符串可以从" master"中的文件读入。将作业发送到远程服务器的计算机。
为了说明这一点,我试图像这样运行* my_script *:
当两项工作完成后,我想做类似的事情:
...假设A在服务器B之前完成了它的工作,立即向它发送下一个工作,如:
...等
同样,非常感谢人们可能会有关于GNU并行是否容易/困难的想法(或者如果像pdsh,cluster ssh这样的东西可能更适合)。
TIA!
答案 0 :(得分:1)
似乎我们可以将问题分成两部分:需要在所有服务器上运行的初始化部分和不关心运行它的服务器的作业处理部分。
最后一部分是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