首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在for循环的单个ssh连接上以并行方式在shell中运行命令

如何在for循环的单个ssh连接上以并行方式在shell中运行命令
EN

Stack Overflow用户
提问于 2022-06-30 15:27:17
回答 1查看 67关注 0票数 0

我正在存储服务器上的ssh连接中运行一个大约3000个卷的for循环,这个循环一个接一个地在循环中运行,而我希望命令vol show-footprint "$vols" -fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1一次在多个卷上并行运行,假设一次运行10个卷。

这里,myTotalVol包含所有3k卷名,如下所示:

代码语言:javascript
复制
myvol001
myvol002
myvol003
myvol004
myvol005

下面是正在工作的小型for loop

代码语言:javascript
复制
for vols in $(cat myTotalVol);
do 
    echo -n "$vols " ;\
    ssh storageServer01 "row 0; set -unit MB; \
    vol show-footprint "$vols" -fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1"; \
done

请建议我是否可以一次在多个卷上运行上述命令,这些卷保存在myTotalVol文件中。

编辑:

正如在评论部分中所问的,因此下面只是一个视图,它是如何工作的.

代码语言:javascript
复制
$ ssh store01
Last login time: 6/30/2022 10:49:41
store01::> row 0;set -unit MB
  (rows)
store01::> vol show-footprint myvol001 -fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1
vserver  volume               volume-blocks-footprint volume-blocks-footprint-bin0 volume-blocks-footprint-bin1
-------- -------------------- ----------------------- ---------------------------- ----------------------------
myvol001 myvol00198703MB                 48272MB                      51988MB

正如您在这里看到的命令vol show-footprint myvol001 -fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1一样,我必须运行这个命令超过3000个卷,就像我在这个命令中有myvol001一样,所以myvol001会像我在for循环中使用的那样进入变量,在那里我使用的是"$vols",它指的是文件中的3k vols。

EN

回答 1

Stack Overflow用户

发布于 2022-07-01 07:54:33

我不太清楚您的目标是什么,但是您应该能够创建一个复合语句,生成您想要的命令,然后通过ssh这样发送:

代码语言:javascript
复制
{ printf "row 0; set -unit MB;\n"
  while read -r vol ; do 
     printf "vol show-footprint ${vol} -fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1\n"
  done < myTotalVol } | ssh store01

如果您在|之前添加了一个注释字符,您可以尝试它并查看它会产生什么:

代码语言:javascript
复制
{ ...
  ... 
  done < myTotalVol } # | ssh store01

或者你可以用awk来做

代码语言:javascript
复制
awk 'BEGIN{print "row 0; set -unit MB"} {print "vol show-footprint", $1, "-fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1"}' myTotalVol | ssh store01

同样,将#放在| ssh store01前面,以便查看和检查输出,而不将其发送到ssh

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72818382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档