bash脚本中的许多并发SSH命令?

我的Bash-Foo不强。 现在我有类似的东西

function update_project { for i in server-{1,2,3,4} ; do echo "Updating $i" ssh $i "git pull" done } 

服务器的数量每天都在增长,而且由于每次更新大约需要20秒,所以我想同时处理这些请求。 什么是最好的方式来做到这一点,而仍然能够看到输出(如失败的合并)?

你为什么要重新发明轮子? 只需使用Capistrano来部署您的项目代码。 它专为此目的而devise,并在所有configuration的机器上并行运行部署。

func将允许你发送一个命令到任意数量的机器,并让你观看输出。

有几个并行的ssh项目。 找pssh。

其他答案之一是要做的正确的事情,但要直接回答你的问题,只需在命令的末尾添加&符号:

 ssh $i "git pull" & 

如果你安装了GNU Parallel http://www.gnu.org/software/parallel/,你可以这样做:

 parallel --slf hostfile --nonall --tag git pull 

您可以简单地通过以下方式安装GNU Parallel:

 wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel chmod 755 parallel cp parallel sem 

观看GNU Parallel的介绍video了解更多信息: https : //www.youtube.com/playlist?list = PL284C9FF2488BC6D1