如何在bash中触发多个远程shell脚本并发运行然后等待它们完成?

时间:2014-10-07 10:09:04

标签: bash shell ssh concurrency

我有一个bash脚本,它通过SSH在远程机器上运行许多任务。每个脚本都很长,所以我想将它们作为后台任务同时运行。在继续之前我还需要完成所有这些工作。我知道我可以对后者使用wait命令但是当我坚持和最后使它成为后台任务,一切都停止了。

通过停止工作,我的意思是脚本似乎没有运行,但主脚本仍然完成。

ssh root@machine1 'bash -s' < script1 my_parameter
ssh root@machine2 'bash -s' < script2 my_parameter
ssh root@machine3 'bash -s' < script3 my_parameter

wait

some_other_task

1 个答案:

答案 0 :(得分:1)

对于Ubuntu 11.04,这对我来说很好用:

#!/bin/bash
ssh user@server1 <command.sh &
ssh user@server2 <command.sh &
ssh user@server3 <command.sh &

wait

echo end

command.sh的内容:

sleep 5
hostname

<小时/> 的更新

使用命令行参数会变得更复杂。您可以使用&#34; here-document&#34;和set设置$ 1 $ 2 $ 3。

#!/bin/bash

ssh -T root@server1 << EOF
#!/bin/bash
set -- $my_parameter1 $my_parameter2 $my_parameter3
$(cat script1)
EOF

ssh -T root@server2 << EOF
#!/bin/bash
set -- $my_parameter1 $my_parameter2 $my_parameter3
$(cat script2)
EOF

ssh -T root@server3 << EOF
#!/bin/bash
set -- $my_parameter1 $my_parameter2 $my_parameter3
$(cat script3)
EOF

wait

echo end