功能描述 集群批量执行脚本
假设有三台服务器 hadoop181,hadoop182,hadoop183, 我需要从hadoop181 去执行hadoop182或者hadoop183上的命令, 这时候可以使用这个小脚本
#!/bin/bash
function printhelp(){
echo "============================== xssh help info ====================================="
echo "|| using e.g : ||"
echo "|| format: [xssh] [-t] [subcommand] ||"
echo "|| e.g.1: xssh -t sudo mkdir -p /home/hadoop/sbin/ ||"
echo "|| e.g.2: xssh ll -l /home/hadoop/ ||"
echo "|| ||"
echo "|| using option : ||"
echo "|| [-t] : open a new TTY terminal to execute command ||"
echo "|| ||"
echo "|| using subcommand : ||"
echo "|| [subcommand] : same like using a command on Linux ||"
echo "|| ||"
echo "|| ||"
echo "||*************************** attention please *********************************||"
echo "|| ||"
echo "|| You need to specify -t when using sudo in subcommands ||"
echo "|| ||"
echo "|| the variable hostnames in the source file is used to set the target host list ||"
echo "================================ xssh help info ==================================="
exit 0;
}
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
printhelp
fi
subcommand=""
user=`whoami`
# 需要操作的主机列表, 通过空格隔开
hostnames=(hadoop181 hadoop182 hadoop183)
# 3. 判断是否需要新启动一个tty窗口
case $1 in
"--help"| "-h" ){
printhelp
};;
"-t"){
shift
echo "[DEBUG] need to open new tty terminal to execute command "
subcommand="-t"
};;
*){
echo "[DEBUG] 1 command is :$*"
echo "[DEBUG] 1 command is :$*"
};;
esac
#4 循环远程执行指令
for host in "${hostnames[@]}"
do
echo "[DEBUG] ssh to $host to execute commands [$subcommand $@] "
ssh $user@$host $subcommand "$@"
done