1、jps-cluster.sh
如果我们想在Bigdata01 这台电脑上,查看整个集群的服务启动情况,可以使用这个脚本文件。
#!/bin/bash
USAGE="使⽤⽅法:sh jps-cluster.sh"
NODES=("bigdata01" "bigdata02" "bigdata03")
for NODE in ${NODES[*]};do
echo "--------$NODE--------"
ssh $NODE "/opt/installs/jdk/bin/jps"
done
echo "------------------------------------------"
echo "--------jps-cluster.sh脚本执⾏完成!--------"
记得赋权限
chmod u+x jps-cluster.sh
不管在哪个地方都可以执行该命令 jps-cluster.sh
2、集群文件分发脚本【xsync.sh】
我们经常进行文件的长拷贝,拷贝完第一台,拷贝第二台,如下所示:
scp -r 文件或者文件夹 root@主机名:/路径
可以一个命令下去,分发所有的Linux服务器,不用一个个的长拷贝了。
需要有一个服务,rsync
需要在所有的分发的电脑上安装 rsync。
脚本文件:
yum install -y rsync
一定要注意:此脚本文件,不要在windows进行编辑,否则会报错,全程使用linux进行编辑,原因是windows中的字符集和linux中的不一样。
touch xsync.sh
chmod u+x xsync.sh
使用的案例: xsync.sh /etc/profile
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
echo No Enough Arguement!
exit;
fi#2. 遍历集群所有机器
for host in bigdata02 bigdata03
do
echo ==================== $host ====================
#3. 递归遍历所有目录
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取全路径
pdir=$(cd -P $(dirname $file); pwd)
echo pdir=$pdir#6. 获取当前文件的名称
fname=$(basename $file)
echo fname=$fname#7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
ssh $host "source /etc/profile;mkdir -p $pdir"#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
rsync -av $pdir/$fname $USER@$host:$pdir
else
echo $file Does Not Exists!
fi
done
done
rsync -av
最常用的选项,表示递归模式,保留软链接、文件权限、修改时间戳、属主、属组、设备文件、特殊文件,详细显示执行过程
测试一下:
xsync.sh 跟上你想同步的文件或者文件夹都可以
xsync.sh /etc/hosts 将hosts文件同步给其他两台电脑。
3、命令同步执行脚本[xcall.sh]
一个命令在一个电脑上运行,是否可以在多台电脑上同步执行呢?
比如 yum install -y rsync
vi xcall.sh
编辑
chmod u+x xcall.sh
#!/bin/bash
params=$@
i=1
for (( i=1 ; i <= 3 ; i = $i + 1 )) ; do
echo ============= bigdata0$i $params =============
ssh bigdata0$i "$params"
done
测试:
xcall.sh hostname
xcall.sh ifconfig
xcall.sh yum install -y rsync
xcall.sh source /etc/profile不能是xcall.sh jps
除非写全路径:xcall.sh /opt/installs/jdk/bin/jps
可以将 jps这个命令做一个软链接到/usr/local/bin 下
xcall.sh ln -s /opt/installs/jdk/bin/jps /usr/local/bin/jps
这样一修复,就可以 xcall.sh jps