首页 > 代码库 > 对多台Linux主机的执行相同的命令

对多台Linux主机的执行相同的命令

最近在学习Linux集群的相关知识,实验中经常会在一大批主机上安装相同软件包、或者添加相应的配置信息,花了一点时间,写了一个shell脚本,虽然很拙劣,但还是可以满足现在的需求了,如果以后有其他需求的话,在考虑修改这个脚本的……


控制主机:VS            192.168.2.131

被控主机1:RS1        192.168.2.132

被控主机2:RS2         192.168.2.133 

#!/bin/bash
#
#FileName:cluster_cmd
###Performs the same command in multiple Linux host
read -p "Please input your command:" cmd
for i in {RS1,RS2}
do
  if [ ! ping -c 1 -W 1 $i &> /dev/null ];then
    echo "Server $i is DOWN!"
    continue
  fi
        echo -ne "\n"
        echo -e "Server $i is running \033[41;1m $cmd \033[0m"
        ssh $i "$cmd"
done
if [ ! $1 == "" ];then
  case $1 in
  -y|y|-Y|Y)
        echo -ne "\n"
        echo -e "Server VS is running \033[41;1m $cmd \033[0m"
        eval $cmd
  ;;
  *)
        Usage basename $0 [-y|y|-Y|Y]
  ;;
  esac
fi

运行该脚本之前先要做三件事:

1、解各主机间的信任问题,本次试验采用的是putty生成的公钥信息分发给各个主机,使用putty完成主机间相互调用命令时的验证;

2、本脚本使用了ssh别名的机制,需要在/etc/ssh/ssh_config文件中定义ssh别名;

3、在/etc/hosts文件中定义各个主机箱相对应的ip地址。

#############

将循环体改为各主机的ip地址的话,可以跳过最后两步。



如果需要执行的命令过于复杂的话,建议将各个命令写到一个文件中,通过while循环将各条命令以字符串的形式赋值给变量cmd,或者在控制主机上编写一个脚本,然后同步至各个被控制主机上,然后执行该脚本即可。

本文出自 “红楼遗梦” 博客,请务必保留此出处http://leidongya.blog.51cto.com/7375845/1534251