我的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