本篇文章介绍的是linux集群常用的执行命令脚本(xcall)和同步文件脚本(xsync),如有错误或不当之处,还望各位大神批评指正。众所周知,在配置Linux系统时常常会遇到同一个配置文件要在多个机器上配置的烦恼,如果一台一台机器配置的话十分的繁琐且没有什么意义,那么这时就用到了如下两个脚本。
一、同步文件脚本(xsync)
- 作用是将文件或者文件夹同步到集群上的其他从机
- 注意需要主机和从机安装命令rsync(yum install rsync -y)
脚本源码
#!/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=2;host<=5;host++ ))
do
echo "================current host is hadoop00$host================="
rsync -rvl $pdir/$filename $user@hadoop00$host:$pdir
done
echo "complate !"
实际应用
# 使用当前用户拷贝jdk目录下所有文件到从机
sync jdk/
# 使用root用户权限拷贝文件到从机
sync jdk/ -root
二、执行命令脚本(xcall)
- 作用是在所有从机上执行相同的命令
脚本源码
#!/bin/bash
# 获取控制台指令
cmd=$*
# 判断指令是否为空
if (( #$cmd -eq # ))
then
echo "command can not be null !"
exit
fi
# 获取当前登录用户
user=`whoami`
# 在从机执行指令,这里需要根据你具体的集群情况配置,host与具体主机名一致
for (( host=2;host<=5;host++ ))
do
echo "================current host is hadoop00$host================="
echo "--> excute command \"$cmd\""
ssh $user@hadoop00$host $cmd
done
echo "excute successfully !"
实例应用
# 使用当前用户在所有从机上执行‘whoami’命令
xcall whoami
- 这两个脚本功能比较单一,大家可以往里边添加新的功能,定制自己喜欢的脚本。