Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中触发多个远程shell脚本并发运行,然后等待它们完成?_Bash_Shell_Ssh_Concurrency - Fatal编程技术网

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

如何在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

我有一个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
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