本脚本适用于实验环境,当多个机器需要执行相同的命令,或者需要向多台机器的同一位置上传文件时,可用到以下两个脚本。
xcall — 多机器执行相同命令,并返回输出结果到执行机。
#!/bin/bash
pcount=$#
if((pcount==0));then
echo no args;
exit;
fi
#本机执行命令
echo -------------localhost----------
$@
#test1-test5机器执行命令
for((host=1; host<=5; host++));
do echo ----------test$host---------
ssh test$host $@
done
xsync — 向多机推送文件
#!/bin/bash
# 获取输出参数,如果没有参数则直接返回
pcount=$#
if [ $pcount -eq 0 ]
then
echo "no parameter find !";
exit;
fi
# 获取传输文件名
p1=$1
filename=`basename $p1`
echo "load file $p1 success !"
# 获取文件的绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo "file path is $pdir"
# 获取当前用户(如果想使用root用户权限拷贝文件,在命令后加入-root参数即可)
user=$2
case "$user" in
"-root")
user="root";;
"")
user=`whoami`;;
*)
echo "illegal parameter $user"
esac
echo $user
# 拷贝文件到从机(这里注意主机的host需要根据你的实际情况配置,要与你具体的主机名对应)
for (( host=1;host<=5;host++ ))
do
echo "================current host is test$host================="
rsync -rvl $pdir/$filename $user@test$host:$pdir
done
echo "complate !"
最后需要对这两个脚本赋予执行权限chmod +x
经常使用的话,可以加到path里
使用这两个脚本需要注意几个问题:
1、host名称需要有规则,比如test1,test2,test3……
2、host名称前缀可根据实际情况修改
3、某些情况下(如需要使用管道|),需要将完整的命令使用引号包围作为该脚本的一个整体的参数,比如xcall “ps -ef | grep ssh”
4、使用之前需要生成用于ssh登录的密钥,并在几台机器上信任该密钥
5、第一次使用可能会提示是否保存ssh key,yes即可