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

请您参考如下方法:

这对于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 

更新:

使用命令行参数,它变得更加复杂。您可以使用“这里文档”和 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 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!