【问题标题】:Shell script to parallely execute a command remotely on N systems在 N 个系统上远程并行执行命令的 Shell 脚本
【发布时间】:2017-08-31 07:58:40
【问题描述】:

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

【问题讨论】:

标签: bash shell scripting automation


【解决方案1】:

基本上我会这样做:

for SRV in srv1 srv2 srv3
do
    ssh ${SRV} "yum -y update" &
done
wait

它将在每台服务器上启动命令并等待一切完成。

您应该考虑在您的.ssh/config 中添加不同的srv,并在每台服务器上使用公钥身份验证。

【讨论】:

  • 您可能还想添加一些复杂性以防止运行过多的并发操作。
  • @jml 感谢您的回复。你认为上面的脚本在任何情况下都可以进入挂起状态吗?
  • 它不太可能挂起(除非 SSH 连接不稳定),但很难对错误进行分类。
  • @Aty 是的,wait 表示等待所有当前活动的子进程(参见man bash)。但这是一种基本方法,因此您可能会遇到问题(输出过滤、并发操作过多...)
【解决方案2】:

你可以试试Cluster SSH。这是在多台机器上执行相同操作的简单方法。点击链接查看教程。

【讨论】:

  • 感谢您的回复。我正在寻找一个 shell 脚本而不是一个工具。
  • @Aty 为什么?您是在尝试解决问题,还是只是在玩 Bash 脚本?
  • @dimo414 通过 shell 脚本在 N 个系统上按顺序执行远程命令非常容易,但这需要大量时间才能完成,因为任务是在每个系统上按顺序执行的。寻找通过 shell 脚本解决此问题的方法。
  • Shell 脚本通常不是解决问题的最佳方法。存在更强大工具的原因正是因为用 shell 语言构建自己的工具容易出错。如果使用适当的部署工具开销太大,那么管理并行运行 n 个远程命令的 shell 脚本将更加麻烦。
  • 顺序执行:用于filename中的系统; do ssh -o StrictHostKeyChecking=no -l loginID -t $system "command";done
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2010-10-10
    • 2011-04-26
    • 1970-01-01
    • 2012-12-05
    • 2020-01-08
    • 2012-07-27
    • 2017-09-26
    • 2017-11-24
    • 1970-01-01
    相关资源
    最近更新 更多