bash - 在多台机器上并行运行脚本

标签 bash gnu gnu-parallel

我很想知道在多台机器的后台尽快启动脚本的最佳方式。目前,我正在这样做

为每个 IP 地址运行

ssh user@ip -t "perl ~/setup.pl >& ~/log &" &

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

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

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

但是好像不行,我在目标机器上看到GNU并行启动的脚本,但是停滞不前。我在日志中没有看到任何内容。

我在使用 GNU parallel 时做错了什么?

最佳答案

GNU Parallel 默认假定它在哪台机器上运行作业并不重要——这通常适用于计算。就您而言,这很重要:您希望每台机器上都有一份工作。此外,GNU Parallel 会给出一个数字作为 setup.pl 的参数,而您显然不希望这样。

幸运的是,GNU Parallel确实使用--nonall支持您想要的:

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

我鼓励您也阅读并理解其余示例。

关于bash - 在多台机器上并行运行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17006243/

相关文章:

regex - sed中 'i'和 'I'的区别

linux - 我如何知道 bash 中的进程是否超时?

c++ - C 预处理文件中这些不熟悉的行是什么?

parallel-processing - 使用 --onall 时,GNU 并行不会在远程服务器上并行运行

linux - ffmpeg 添加所有音轨到视频转换(mkv)

python - bash 脚本中 Python 命令的 Visual Studio 调试器

C/C++、FORTRAN、下划线和 GNU Autotools

c++ - 在 Mac OS X 上使用 libltdl

hive - 通过 GNU 并行运行时,Beeline 卡在第二个命令上

bash - 将 GNU Parallel 与 Split 结合使用