如何在bash中触发多个远程shell脚本并发运行,然后等待它们完成?
我有一个bash脚本,它通过SSH在远程机器上运行许多任务。每个脚本都相当长,因此我希望将它们作为后台任务同时运行。我还需要在继续之前把它们全部完成。我知道我可以对后者使用wait命令,但是当我坚持到最后使它成为后台任务时,它就停止工作了 停止工作,我的意思是脚本似乎没有运行,但主脚本仍然完成如何在bash中触发多个远程shell脚本并发运行,然后等待它们完成?,bash,shell,ssh,concurrency,Bash,Shell,Ssh,Concurrency,我有一个bash脚本,它通过SSH在远程机器上运行许多任务。每个脚本都相当长,因此我希望将它们作为后台任务同时运行。我还需要在继续之前把它们全部完成。我知道我可以对后者使用wait命令,但是当我坚持到最后使它成为后台任务时,它就停止工作了 停止工作,我的意思是脚本似乎没有运行,但主脚本仍然完成 ssh root@machine1 'bash -s' < script1 my_parameter ssh root@machine2 'bash -s' < script2 my_para
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
sshroot@machine1'bash-s'
这对我使用Ubuntu 11.04很好:
#!/bin/bash
ssh user@server1 <command.sh &
ssh user@server2 <command.sh &
ssh user@server3 <command.sh &
wait
echo end
更新: 使用命令行参数会变得更复杂。您可以使用“此处文档”和
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
#/bin/bash
ssh-Troot@server1我尝试了这个方法,但失败了,因为我将参数传递给脚本。不提那件事是我的错。我将更新我的示例代码。错误为“bash:my_参数:未找到命令”
#!/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