问题引入
我在学习Hadoop,Spark等框架时,发现配置伪分布式环境时经常需要同时控制多台主机,Moba自带的MultiExec并不适合同时控制4台以上的主机。因此我自己设计了一段简单的shell脚本实现了这一功能。
准备
在使用这个脚本之前需要预先实现集群间的IP地址映射
vim /etc/hosts
按照 ip +主机名的格式进行配置
还需要配置好免密(具体可以参考其他csdn博主的文章)
具体实现代码
#!/bin/bash
cmd=$1
if [ ! "$cmd" ];then
cmd="jps"
fi
#提取集群免密通信的虚拟机主机名
hosts=`sed -n '3,$p' /etc/hosts |awk '{print $2}'`
for host in $hosts;do
echo "---------$host------------"
ssh root@$host "$cmd"
done
代码分析
步骤一:控制台输入
定义一个cmd变量用于控制台传入shell命令
步骤二:非空判断
非空判断,如果空,则默认输入jps命令判断进程运行情况
步骤三:提取集群免密通信的虚拟机主机名
首先查看hosts下的主机名
然后发现需要跳过前两行
使用sed -n '3,$p'跳过前两行
最后使用|awk '{print $2}输出第二列元素即可
本步骤具体代码如下
hosts=`sed -n '3,$p' /etc/hosts |awk '{print $2}'`
步骤四:遍历主机执行命令
for host in $hosts;do
echo "---------$host------------"
ssh root@$host "$cmd"
done
结果测试
输出hello
创建文件夹
测试成功!!!
如果有更好的方法欢迎大家一起讨论。
标签:Shell,主机,cmd,主机名,host,免密,hosts,SSH,步骤 From: https://blog.csdn.net/zzy66666c/article/details/140331986