代码拉取完成,页面将自动刷新
#!/usr/bin/env bash
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
# Function :CentOS7.X 批量(drds服务器组内) 执行 命令
# Platform :RedHatEL7.x Based Platform
# Version :1.02
# Date :2022-05-04
# Author :mugoLH
# Contact :houxiaoshuai@baidu.com & hxsaj@126.com
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
# 变量列表 List of common variables
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
# 获取主机名列的源文件
HOST_FILE=/etc/hosts
# 默认主机组关键字(可以设为空)
DEFAULT_HOST_KEY="drds"
# 主机组关键字(默认留空)
HOST_KEY=""
# 函数列表 Function list
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
info_p(){ printf "\e[1;35;40m%-8s %-20s %-24s %-2s %-2s\e[0m\n" "$(date '+%H:%M:%S')" "${1}" "${2}" "${3}" "${4}" >&1 ;}
help_f(){
echo -e "说明:\n pcp2 [ 本地文件或目录 ] [ 远程服务器文件名或目录 ] 实现批量复制本机文件或目录到远程主机"
echo -e " pcp2 ~/.ssh /home/work/ :从本机复制家目录下的.ssh目录到默认服务器组所有服务器的/home/work下"
echo -e " pcp2 -g zookeeper ./zk/zoo.cfg /home/ :从本机复制./zk/zoo.cfg文件到到zookeeper服务器组的/home下"
echo -e " pcp2 -g zookeeper -f ./host.list ./zoo.cfg /home/ :本机复制复制./zk/zoo.cfg到./host.list文件中指定 zookeeper 关键字的主机名的/home下"
echo -e "\n可用的选项如下(也可不加选项默认执行所有默认主机):"
echo -e " -f or --file 指定IP和主机名文件,类似/etc/hosts"
echo -e " -g or --group 指定服务器主机名关键字,也就是主机组,指定在指定的主机组上执行命令"
echo -e "\n主机名清单类似如下:
# 配置列表 Configuration list
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
# IP地址 |主机名 | 部署的组件(zk,xdb,dts,smartdba)
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
192.168.123.29 drdsmp01 zookeeper,xdb
192.168.123.111 drdsmp02 zookeeper,xdb
192.168.123.79 drdsnode01 zookeeper
192.168.123.106 drdsnode02
192.168.123.215 drdsbaknode01
"
}
ctl_ops(){
# 如果未指定主机组,则获取主机文件中所有主机
if [[ -z ${HOST_KEY} ]];then
# 获取主机名列表
Host_NameS=($(grep -Ev "localhost|^#|$(uname -n)" ${HOST_FILE} | awk '{print$2}' | sort | uniq ))
# 指定主机组,则获取主机文件中指定的主机组
elif [[ -n ${HOST_KEY} ]]; then
Host_NameS=($(grep -Ev "localhost|^#|$(uname -n)" ${HOST_FILE} | grep ${HOST_KEY}| awk '{print$2}' | sort | uniq ))
fi
# 遍历主机执行命令
for i in ${Host_NameS[@]};do
Host_Ip=$(grep -w ${i} ${HOST_FILE} | grep -Ev "^#|$(uname -n)" | awk '{print$1}' | sort | uniq)
info_p "从本机复制 ${1} ----> " "${i}(${Host_Ip}):${2}"
scp -pr ${1} ${Host_Ip}:${2}
echo ""
done
}
# 如果参数为空,则退出
if [ $# -eq 0 ];then
exit
elif [[ $# -eq 1 ]]; then
help_f
else
# 获取主机组关键字
while [ -n "$1" ]; do
case $1 in
-g | --group)
HOST_KEY="${2}"
shift 2
;;
-f | --file )
HOST_FILE="${2}"
shift 2
;;
-h | --help )
help_f
exit
;;
*)
break
;;
esac
done
# 循环远程执行命令
if [[ -z ${HOST_KEY} ]] && [[ -f ${HOST_FILE} ]] && [[ -n "${DEFAULT_HOST_KEY}" ]];then
# 获取主机名列表
#HOST_KEY="${DEFAULT_HOST_KEY}"
# 遍历主机执行命令
ctl_ops "${1}" "${2}"
elif [[ -n ${HOST_KEY} ]] && [[ -f ${HOST_FILE} ]] && [[ -n "${DEFAULT_HOST_KEY}" ]] ; then
ctl_ops "${1}" "${2}"
fi
fi
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。