Linux 多台主机批量执行命令

  在分布式系统部署时,会存在以下场景:一个应用部署在 N 台 Linux 主机上,在项目部署前,要验证所有主机的 JDK 版本或其他资源配置是否符合预期,例如,检查所有机器的 JDK 版本是否相同。
  如果逐台登录主机,然后逐台使用命令 “java -version” 来验证,虽然可以完成任务,但是效率低下。为提高效率,可以通过脚本实现多台主机批量执行命令,实现步骤如下所示。

一、Linux 主机设置 ssh 免密登录

  首先 Linux 主机必须设置了 ssh 免密登录,可以将其中一台作为信任主机,免密登录到其他所有主机,具体配置方法见《两台 Linux 主机之间配置信任关系(以及如何解除)》。

二、创建主机列表文件 hosts

  vi hosts 命令创建主机列表文件 hosts,将所有远程主机列在文件中。

$ vi hosts

$ cat hosts 
47.100.247.242
101.132.242.27
47.103.217.188

三、创建 doCommand.sh 脚本

#!/bin/sh

doCommand()
{
    
    
    hosts=`sed -n '/^[^#]/p' hosts`
    for host in $hosts
        do
            echo ""
            echo HOST $host
            ssh $host "$@"
        done
    return 0
}

    if [ $# -lt 1 ]
    then
            echo "$0 cmd"
            exit
    fi
    doCommand "$@"
    echo "return from doCommand"

四、为脚本文件 doCommand.sh 增加执行权限

$ chmod u+x doCommand.sh

五、在信任主机上运行脚本命令

  脚本运行命令格式如下:

./doCommand.sh "[yourcommand]" 

  备注:参数 [yourcommand] 为信任主机上待执行的命令。

  示例如下:

$ ./doCommand.sh "java -version"

HOST 47.100.247.242
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-b10)
OpenJDK 64-Bit Server VM (build 25.171-b10, mixed mode)

HOST 101.132.242.27
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)

HOST 47.103.217.188
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
return from doCommand

  这样该脚本就会在每台机器上执行 “java -version” 命令,并将各台主机的 JDK 版本信息返回信任主机。

文章参考:

猜你喜欢

转载自blog.csdn.net/piaoranyuji/article/details/109802408