Linux一条命令多个机器执行,Linux之——Shell多机器分发文件以及执行命令

网上看到的,很实用的工具。

首先需要设置好机器之间的ssh无密码通讯。

有三个文件,分别是

1.deploy.conf

2.deploy.sh

3.runRemoteCmd.sh

注意:

这三个文件都放在/home/hadoop/tools目录下;

deploy.conf配置文件的第一列是服务器的host名字,后面是对它的标识;

其中deploy.conf是配置文件:

#### NOTES

# There is crontab job using this config file which would compact log files and remove old log file.

# please be carefully while modifying this file until you know what crontab exactly do

#hdp

cdhnode1,all,master,zk,

cdhnode2,all,slave,zk,

cdhnode3,all,slave,zk,jn,kfk,

cdhnode4,all,slave,jn,kfk,

cdhnode5,all,slave,jn,kfk,

deploy.sh是多机器分发脚本:

#!/bin/bash

#set -x

if [ $# -lt 3 ]

then

echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag"

echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag confFile"

exit

fi

src=$1

dest=$2

tag=$3

if [ 'a'$4'a' == 'aa' ]

then

confFile=/home/hadoop/tools/deploy.conf

else

confFile=$4

fi

if [ -f $confFile ]

then

if [ -f $src ]

then

for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`

do

scp $src $server":"${dest}

done

elif [ -d $src ]

then

for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`

do

scp -r $src $server":"${dest}

done

else

echo "Error: No source file exist"

fi

else

echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"

fi

runRemoteCmd.sh是多机器执行命令脚本:

#!/bin/bash

#set -x

if [ $# -lt 2 ]

then

echo "Usage: ./runRemoteCmd.sh Command MachineTag"

echo "Usage: ./runRemoteCmd.sh Command MachineTag confFile"

exit

fi

cmd=$1

tag=$2

if [ 'a'$3'a' == 'aa' ]

then

confFile=/home/hadoop/tools/deploy.conf

else

confFile=$3

fi

if [ -f $confFile ]

then

for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`

do

echo "*******************$server***************************"

ssh $server "source ~/.bash_profile; $cmd"

done

else

echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"

fi

使用方法:

##分发hadoop包到标识为slave服务器的/home/hadoop/app/目录下:

deploy.sh hadoop /home/hadoop/app/ slave

##让标识为zk的所有服务器执行/home/hadoop/app/zookeeper/bin/zkServer.sh start命令

runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" zk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值