多机执行脚本xcall xsync

本脚本适用于实验环境,当多个机器需要执行相同的命令,或者需要向多台机器的同一位置上传文件时,可用到以下两个脚本。

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即可

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注