在分布式系统部署时,会存在以下场景:一个应用部署在 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 版本信息返回信任主机。
文章参考: