内容纲要
在集群中执行同样命令时,需要频繁切换主机输入相同的命令。通过批量脚本可以将脚本命令分发到所有主机上执行
- 编写脚本
#!/bin/bash #获取当前脚本所在路径 s_dir=$(cd
dirname $0
; pwd) #读取同目录下ip文件名(不包含当前主机ip)ip #所有主机需提前配置好免密登录 filename=$s_dir/ip #判断是否在当前机器执行命令 if [ "true" = "$2" ] then echo "在当前主机执行传入的命令:$1"$1
else echo "不在当前主机执行传入的命令" fi #循环向其它主机执行传入的命令 while read -r line do echo "在主机$line上执行传入的命令:$1" ssh root@$line "$1" done < "$filename"脚本执行时发现值能访问第一个主机执行命令,循环体第二遍循环不执行,里面有坑网上解决办法暂时没看懂,采取将while改成for循环来解决。修改后的脚本如下:
#!/bin/bash #获取当前脚本所在路径 s_dir=$(cd
dirname $0
; pwd) #读取同目录下ip文件名不包含当前主机ipip #所有主机需提前配置好免密登录 filename=$s_dir/ip #判断是否在当前机器执行命令 if [ "true" = "$2" ] then echo "在当前主机执行传入的命令: $1"$1
else echo "不在当前主机执行传入的命令" fi #循环向其它主机执行传入的命令 iplist=awk '{print $1}' $filename
echo "$iplist" for host in $iplist do echo "在主机$host上执行传入的命令: $1"ssh root@$host "$1"
done