脚本宝典收集整理的这篇文章主要介绍了Linux自定义脚本整合,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我们经常需要将新建的活着修改后的文件,循环复制文件到所有节点的相同目录下,一次一次执行scp命令显得并不那么友好。
(a)rsync命令原始拷贝F1a;
[root@Bigdata801 hadoop-3.3.1]# rsync -av /opt/module/hadoop-3.3.1/ bigdata802:/opt/module/hadoop-3.3.1/
(b)期望脚本:
xsync 要同步的文件名称
(c)期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
[root@bigdata801 bin]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/module/jdk1.8.0_181/bin:/opt/module/hadoop-3.3.1/bin:/opt/module/hadoop-3.3.1/sbin:/root/bin:/opt/module/jdk1.8.0_181/bin:/opt/module/hadoop-3.3.1/bin:/opt/module/hadoop-3.3.1/sbin:/opt/module/jdk1.8.0_181/bin:/opt/module/hadoop-3.3.1/bin:/opt/module/hadoop-3.3.1/sbin:/opt/module/jdk1.8.0_181/bin:/opt/module/hadoop-3.3.1/bin:/opt/module/hadoop-3.3.1/sbin
(a)在/root/bin目录下创建xsync文件
[root@bigdata801 ~]# cd /root/
[root@bigdata801 ~]# mkdir bin
[root@bigdata801 ~]# cd bin/
[root@bigdata801 bin]# vim xsync
在该文件中编写如下代码
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough arguement!
exIT;
fi
#2. 遍历集群所有机器
for host in bigdata801 bigdata802 bigdata803 bigdata804
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host ";mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
[root@bigdata801 bin]# chmod 777 xsync
[root@bigdata801 bin]# ll
总用量 4
-rwxrwxrwx 1 root root 753 8月 22 20:45 xsync
将刚创建的 bin 分发到其他机器
[root@bigdata801 ~]# xsync bin/
执行过程如下
[root@bigdata801 ~]# xsync bin/
==================== bigdata801 ====================
sending incremental file list
sent 75 bytes received 17 bytes 184.00 bytes/sec
total size is 753 sPEedup is 8.18
==================== bigdata802 ====================
sending incremental file list
bin/
bin/xsync
sent 878 bytes received 39 bytes 611.33 bytes/sec
total size is 753 speedup is 0.82
==================== bigdata803 ====================
sending incremental file list
bin/
bin/xsync
sent 878 bytes received 39 bytes 1,834.00 bytes/sec
total size is 753 speedup is 0.82
==================== bigdata804 ====================
sending incremental file list
bin/
bin/xsync
sent 878 bytes received 39 bytes 611.33 bytes/sec
total size is 753 speedup is 0.82
[root@bigdata801 ~]#
在 bigdata802上查看文件是否分发成功
[root@bigdata802 hadoop-3.3.1]# cd /root/[root@bigdata802 ~]# ll总用量 4-rw-------. 1 root root 1460 2月 28 19:08 anaconda-ks.CFgdrwxr-xr-x. 2 root root 19 8月 22 20:47 bin[root@bigdata802 ~]#
启动集群以后,我们需要查看集群是否启动成功的关键一步就是在各个服务上输入JSP命令查看该服务器上对应的服务,但是每次在各个机器上输一遍未免太麻烦,所以编写以下脚本。
在 /root/bin 下创建 jpsall 文件
[root@bigdata801 bin]# cd /root/bin/[root@bigdata801 bin]# vim jpsall
脚本内容如下
#!/bin/bash #执行 JPS 命令,查询每台服务器上的节点状态echo ===============查询每台服务器状态===============for host in bigdata801 bigdata802 bigdata803 bigdata804do echo =============== $host =============== ssh $host '/opt/module/jdk1.8.0_181/bin/jps'doneecho ===============查询服务器状态结束===============
[root@bigdata801 bin]# chmod +x jpsall
保证自定义脚本在每台机器上都可以使用
[root@bigdata801 bin]# xsync /root/bin/
[root@bigdata801 bin]# jpsall ===============查询每台服务器状态============================== bigdata801 ===============5712 JobHistoryServer5202 DataNode5542 NodeManager5047 NameNode5967 Jps=============== bigdata802 ===============3156 NodeManager3461 Jps3064 SecondaryNameNode2943 DataNode=============== bigdata803 ===============3488 ResourceManager3281 DataNode3651 NodeManager4139 Jps=============== bigdata804 ===============2576 DataNode2699 NodeManager2957 Jps===============查询服务器状态结束===============[root@bigdata801 bin]#
在我们修改环境变量以后,需要重新加载source一下,每个节点都去执行也不那么友好
在 /root/bin 文件夹下创建 callall 文件
[root@bigdata801 bin]# pwd/root/bin[root@bigdata801 bin]# vim callall
脚本内容如下
#!/bin/bash#在集群的所有机器上批量执行同一条命令if(($#==0))then echo 请输入您要操作的命令! exitfiecho 要执行的命令是:$*#循环执行此命令for((i=801;i<=804;i++))do echo ---------------------bigdata$i----------------- ssh bigdata$i $*done
[root@bigdata801 bin]# chmod 777 callall
[root@bigdata801 bin]# xsync /root/bin/==================== bigdata801 ====================sending incremental file listsent 150 bytes received 17 bytes 334.00 bytes/sectotal size is 2,556 speedup is 15.31==================== bigdata802 ====================sending incremental file listbin/bin/callallsent 489 bytes received 39 bytes 1,056.00 bytes/sectotal size is 2,556 speedup is 4.84==================== bigdata803 ====================sending incremental file listbin/bin/callallsent 489 bytes received 39 bytes 352.00 bytes/sectotal size is 2,556 speedup is 4.84==================== bigdata804 ====================sending incremental file listbin/bin/callallsent 489 bytes received 39 bytes 1,056.00 bytes/sectotal size is 2,556 speedup is 4.84[root@bigdata801 bin]#
[root@bigdata801 bin]# callall ls -l要执行的命令是ls -l---------------------bigdata801-----------------总用量 4-rw-------. 1 root root 1460 2月 28 19:08 anaconda-ks.cfgdrwxr-xr-x 2 root root 67 8月 29 14:11 bin---------------------bigdata802-----------------总用量 4-rw-------. 1 root root 1460 2月 28 19:08 anaconda-ks.cfgdrwxr-xr-x. 2 root root 67 8月 29 14:11 bin---------------------bigdata803-----------------总用量 4-rw-------. 1 root root 1460 2月 28 19:08 anaconda-ks.cfgdrwxr-xr-x. 2 root root 67 8月 29 14:11 bin---------------------bigdata804-----------------总用量 4-rw-------. 1 root root 1460 2月 28 19:08 anaconda-ks.cfgdrwxr-xr-x. 2 root root 67 8月 29 14:11 bin[root@bigdata801 bin]#
如果输入 callall ll 报错 bash: ll: 未找到命令
是因为"ll"命令不是linux的基本命令,它是"ls -l"的别名,部分版本并不直接支持“ll”命令输出。
[root@bigdata801 bin]# callall ll要执行的命令是ll---------------------bigdata801-----------------bash: ll: 未找到命令---------------------bigdata802-----------------bash: ll: 未找到命令---------------------bigdata803-----------------bash: ll: 未找到命令---------------------bigdata804-----------------bash: ll: 未找到命令[root@bigdata801 bin]#
以上是脚本宝典为你收集整理的Linux自定义脚本整合全部内容,希望文章能够帮你解决Linux自定义脚本整合所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。