多重执行xcall.sh
#!/bin/bash
# 遍历所有节点(集群主机列表)
for i in cdhmaster01 cdhmaster02 cdhmaster03 cdhnode01 cdhnode02 cdhnode03
do
# 打印当前正在操作的主机,方便区分输出
echo "--------- $i ----------"
# 通过 ssh 在远程主机执行传入的命令
# "$*" 表示把所有参数当作一个整体传过去
# 例如:./xcall.sh pwd
# 实际执行:ssh cdhmaster01 "pwd"
ssh $i "$*"
done
集群分发xsync.sh
#!/bin/bash
if [ $# -eq 0 ]; then
echo "Usage: $0 [more files_or_dirs]"
exit 1
fi
hosts=(cdhmaster01 cdhmaster02 cdhmaster03 cdhnode01 cdhnode02 cdhnode03)
user=$(whoami)
for src in "$@"
do
if [ ! -e "$src" ]; then
echo "Not found: $src"
continue
fi
abs_src=$(readlink -f "$src")
name=$(basename "$abs_src")
parent=$(dirname "$abs_src")
for host in "${hosts[@]}"
do
echo "===== $host ====="
ssh "$host" "mkdir -p '$parent'"
if [ -d "$abs_src" ]; then
rsync -av "$abs_src" "$user@$host:$parent/"
else
rsync -av "$abs_src" "$user@$host:$parent/"
fi
done
done