首页 > 代码库 > 对多台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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。