Bash 在N个系统上远程并行执行命令的Shell脚本

Bash 在N个系统上远程并行执行命令的Shell脚本,bash,shell,scripting,automation,Bash,Shell,Scripting,Automation,如何通过shell脚本在N个系统上并行远程执行命令?命令是yum-y update基本上我会这样做: srv1 srv2 srv3中SRV的 做 ssh${SRV}“yum-y更新”& 完成 等待 它将在每个服务器上启动该命令,并等待所有操作完成 您应该考虑在 > SSH/CONFIG中添加不同的 SRV ,并在每个服务器上使用公钥认证。 基本上我会这样做: srv1 srv2 srv3中SRV的 做 ssh${SRV}“yum-y更新”& 完成 等待 它将在每个服务器上启动该命令,并等待所

如何通过shell脚本在N个系统上并行远程执行命令?命令是
yum-y update

基本上我会这样做:

srv1 srv2 srv3中SRV的

做
ssh${SRV}“yum-y更新”&
完成
等待
它将在每个服务器上启动该命令,并等待所有操作完成


您应该考虑在<代码> > SSH/CONFIG中添加不同的<代码> SRV ,并在每个服务器上使用公钥认证。

基本上我会这样做:

srv1 srv2 srv3中SRV的

做
ssh${SRV}“yum-y更新”&
完成
等待
它将在每个服务器上启动该命令,并等待所有操作完成


您应该考虑在<代码> > SSH/CONFIG中添加不同的<代码> SRV ,并在每个服务器上使用公钥认证。

您可以尝试一下。这是一种在多台机器上执行相同任务的简单方法。按照链接查看教程。

您可以尝试。这是一种在多台机器上执行相同任务的简单方法。按照链接查看教程。

GNU Parallel具有以下功能:

N=10
parallel -j$N --nonall -S server1,server2,server3 yum -y update
还可以从文件中读取服务器:

N=10
parallel -j$N --nonall --slf hostfile yum -y update

GNU Parallel具有以下功能:

N=10
parallel -j$N --nonall -S server1,server2,server3 yum -y update
还可以从文件中读取服务器:

N=10
parallel -j$N --nonall --slf hostfile yum -y update


salt ssh n-systems-pattern pkg.升级
就像我知道如何通过ansible、chef、salt等配置工具来完成一样。正在通过shell脚本寻找解决方案。请尝试GNU并行:
salt ssh n-systems-pattern pkg。升级
,如中所示,我知道如何通过配置工具(如ansible、chef、salt)完成。正在通过shell脚本寻找解决方案。请尝试GNU parallel:您可能还需要添加一些复杂性,以防止运行过多的并发操作。@jml感谢您的回复。您认为上面的脚本在任何情况下都会处于挂起状态吗?它不太可能挂起(除非SSH连接不稳定),但很难对错误进行分类。@Aty Yes
wait
表示等待所有当前活动的子进程(cf)。但这是一种基本的方法,因此您可能会遇到问题(输出筛选、太多并发操作…),您可能还需要添加一些复杂度,以防止运行太多并发操作。@jml感谢您的回复。您认为上面的脚本在任何情况下都会处于挂起状态吗?它不太可能挂起(除非SSH连接不稳定),但很难对错误进行分类。@Aty Yes
wait
表示等待所有当前活动的子进程(cf)。但这是一种基本方法,因此您可能会遇到问题(输出过滤、太多并发操作…),谢谢您的回复。我在找一个shell脚本而不是工具。@Aty为什么?您是在试图解决问题,还是只是在玩Bash脚本?@dimo414通过shell脚本以顺序方式在N个系统上远程执行命令非常容易,但这需要大量时间才能完成,因为任务是在每个系统上顺序执行的。正在寻找通过shell脚本解决此问题的方法。shell脚本通常不是问题的最佳解决方案。更强大的工具之所以存在,正是因为用shell语言构建自己的工具容易出错。如果使用适当的部署工具的开销太大,那么管理并行运行n个远程命令的shell脚本将更加麻烦;do ssh-o strichostkeychecking=no-l loginID-t$system“命令”;谢谢你的答复。我在找一个shell脚本而不是工具。@Aty为什么?您是在试图解决问题,还是只是在玩Bash脚本?@dimo414通过shell脚本以顺序方式在N个系统上远程执行命令非常容易,但这需要大量时间才能完成,因为任务是在每个系统上顺序执行的。正在寻找通过shell脚本解决此问题的方法。shell脚本通常不是问题的最佳解决方案。更强大的工具之所以存在,正是因为用shell语言构建自己的工具容易出错。如果使用适当的部署工具的开销太大,那么管理并行运行n个远程命令的shell脚本将更加麻烦;do ssh-o strichostkeychecking=no-l loginID-t$system“命令”;完成