最近在学习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,或者在控制主机上编写一个脚本,然后同步至各个被控制主机上,然后执行该脚本即可。
对多台Linux主机的执行相同的命令,布布扣,bubuko.com
时间: 2024-10-20 08:22:12