gpt4 book ai didi

ubuntu - 如何等待多个远程进程(通过 ssh)完成?

转载 作者:行者123 更新时间:2023-12-02 14:12:55 24 4
gpt4 key购买 nike

我的情况是我有许多进程应该在不同的远程主机中同时启动(或多或少)。生成所有远程进程的主脚本应等待所有进程完成,然后才能继续进行下一个分布式执行。到目前为止我尝试过的方法(在 Ubuntu Server 12.04 上没有成功,/bin/sh 指向/bin/bash)是:

#!/bin/bash

for run_input in run1.data run2.data ; do
for i in `seq 0 10` ; do
ssh node$i "/path/to/bin $run_input /path/to/node$i.config" &
done
wait
done

那么,上述方法有什么问题呢?

编辑:

请注意,每个远程主机的命令都不同。

最佳答案

只是回答我自己的问题,我这样做的方式没有任何问题(尽管有些人可能会推荐使用 pssh 或类似的东西)。我在问题中建议的方式是使用远程主机为发送的每个命令创建一个临时 ssh session 。这个 ssh session 仍然在后台运行,只需调用 wait ,脚本应该暂停,直到所有后台子进程都完成 - 在这种情况下,是 ssh session 。

我做错了什么是我将文件输送到一个while循环中,例如:

cat file.txt | while read line ; do
ssh node "do_something_with $line" &
done
wait

上面的问题是,当管道进入 while 循环时,会创建一个子 shell,所以创建的远程 ssh session 不是这个脚本的 child ,而是子 shell。因此,调用 wait没有任何效果。

关于ubuntu - 如何等待多个远程进程(通过 ssh)完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12673273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com