3

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

为每个 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 并行时做错了什么?

4

3 回答 3

3

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

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

于 2013-06-09T14:32:41.603 回答
2

我建议你使用 pdsh

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

用法:

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

它可能不包含在您的 linux 发行版中,因此请通过 yum 或 apt 获取

于 2013-06-09T06:49:48.223 回答
0

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

于 2013-06-10T04:55:52.440 回答