加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
pcp2.sh 3.96 KB
一键复制 编辑 原始数据 按行查看 历史
hxsaj 提交于 2024-03-18 01:19 . 新增部署mysql8
#!/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
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化