Linux文件分发脚本

Linux文件分发脚本

免密登录

Linux文件分发脚本需要各节点提前设置免密登录。

1
2
3
4
5
6
7
8
9
10
11
## 首先检查一下是否可以免密登录到node03
[root@node03 opt]# ssh node03
## 如果不能免密登录,进行免密ssh设置,三次回车生成公钥和密钥。生成的相关信息文件存储在根目录的.ssh/路径下
[root@node03 opt]# ssh-keygen -t rsa
## 拷贝密钥,第一次登录需要输入密码
[root@node03 opt]# ssh-copy-id node03
## 再次进行免密登录检查
[root@node03 opt]# ssh node03
Last login: Sat Mar 27 11:56:16 2021 from ::1
## 其它节点同理
[root@node03 opt]# ssh-copy-id node04

安装rsync插件

1
2
3
[root@node03 opt]# which rsync
/usr/bin/which: no rsync in (/usr/java/jdk1.8.0_162/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@node03 opt]# yum install -y rsync

编写脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
## 判断参数个数。$#是获取所有参数个数。
if [ $# -lt 1 ]
then
echo '至少要传入1个参数!'
exit;
fi
## 遍历集群所有机器
for host in node03 node04 node05
do
echo ==================== 当前正在操作的集群机器:$host ====================
## 遍历所有目录,挨个发送。$@是获取所有文件
for file in $@
do
## 判断文件是否存在
if [ -e $file ]
then
## 获取父目录。dirname是去除文件名中的非目录部分。
pdir=$(cd -P $(dirname $file); pwd)
## 获取当前文件的名称
fname=$(basename $file)
## ssh到目标位置,创建目录
ssh $host "mkdir -p $pdir"
## 分发文件到指定路径。a表示递归传输,v表示详细模式输出
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done

存放到用户bin目录并修改权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
## 上传到指定目录
[root@node03 bin]# cd /home/henrrywan/
[root@node03 henrrywan]# ls
myRsync.sh
## 修改权限
[root@node03 henrrywan]# chmod 777 myRsync.sh
## 使用自定义脚本分发文件
[root@node03 henrrywan]# ./myRsync.sh /opt/bigdata/
==================== 当前正在操作的集群机器:node03 ====================
sending incremental file list
==================== 当前正在操作的集群机器:node04 ====================
sending incremental file list
bigdata/
bigdata/flink
bigdata/spark
==================== 当前正在操作的集群机器:node05 ====================
sending incremental file list
bigdata/
bigdata/flink
bigdata/spark
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2023 henrrywan

请我喝杯咖啡吧~

支付宝
微信