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