文章目录
-
- 编写集群命令执行脚本
-
- xcall集群命令执行
-
- [1. 脚本需求](#1. 脚本需求)
- [2. 需求分析](#2. 需求分析)
- [3. 脚本实现](#3. 脚本实现)
-
- [3.1 创建脚本存放目录](#3.1 创建脚本存放目录)
- [3.2 编写xcall脚本](#3.2 编写xcall脚本)
- [3.3 修改脚本执行权限](#3.3 修改脚本执行权限)
- [3.4 测试脚本](#3.4 测试脚本)
- 编写集群分发脚本
-
- xsync集群分发脚本
-
- [1. 脚本需求](#1. 脚本需求)
- [2. 需求分析](#2. 需求分析)
- [3. 脚本实现](#3. 脚本实现)
-
- [3.1 创建脚本存放目录](#3.1 创建脚本存放目录)
- [3.2 编写xsync脚本](#3.2 编写xsync脚本)
- [3.3 修改脚本执行权限](#3.3 修改脚本执行权限)
- [3.4 测试脚本](#3.4 测试脚本)
编写集群命令执行脚本
xcall集群命令执行
1. 脚本需求
- 需求: 简化对多个远程主机执行相同命令的过程。允许用户通过一个单一的命令行调用,在一组预定义的主机上执行任意命令。方便集群管理和自动化任务,减少重复工作并提高效率。
2. 需求分析
-
使用
xcall
命令进行命令执行, 例如shxcall ls -al /
-
期望脚本
xcall
能够在所有预定义的主机上查看根目录/
的内容。
3. 脚本实现
-
脚本存放在
/home/bigdata/bin
目录下,在~/.bashrc
中添加以下内容,以便bigdata
用户可以在系统的任何位置直接执行。shexport PATH=$PATH:/home/bigdata/bin
-
使环境变量生效
source ~/.bashrc
。
3.1 创建脚本存放目录
-
在
/home/bigdata
目录下创建bin
文件夹:shmkdir bin
-
脚本存放在
/home/bigdata/bin
目录下,以便bigdata
用户可以在系统的任何位置直接执行。
3.2 编写xcall脚本
-
在
/home/bigdata/bin
目录下创建xall
文件:shcd /home/bigdata/bin vim xcall
-
编写脚本内容:
bash#!/bin/bash # 定义主机名数组 hosts=("hadoop101" "hadoop102" "hadoop103") # 检查是否有外部参数传递给脚本 if [ $# -eq 0 ]; then echo "Usage: $0 <command>" exit 1 fi # 遍历主机数组,对每个主机执行 SSH 命令 for host in "${hosts[@]}"; do echo "-------- $host --------" ssh "$host" "$*" done
3.3 修改脚本执行权限
-
使
xcall
脚本具有执行权限:shchmod +x xcall
3.4 测试脚本
-
测试
xcall
脚本是否正常工作:shxcall ls -al /
编写集群分发脚本
xsync集群分发脚本
1. 脚本需求
- 需求:实现循环复制文件到所有节点的相同目录下。
2. 需求分析
-
使用
rsync
命令进行原始拷贝,例如:shrsync -av /opt/module bigdata@hadoop102:/opt/
-
期望脚本
xsync
能够同步指定的文件名称。
3. 脚本实现
- 脚本存放在
/home/bigdata/bin
目录下,以便bigdata
用户可以在系统的任何位置直接执行。
3.1 创建脚本存放目录
-
在
/home/bigdata
目录下创建bin
文件夹:shmkdir bin
3.2 编写xsync脚本
-
在
/home/bigdata/bin
目录下创建xsync
文件:shcd /home/bigdata/bin vim xsync
-
编写脚本内容:
bash#!/bin/bash hosts=("hadoop101" "hadoop102" "hadoop103") # 1. 判断参数个数 if [ $# -lt 1 ] then echo "Not Enough Arguments!" exit 1 fi # 2. 遍历集群所有机器 for host in "${hosts[@]}"; 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 exist!" fi done done
3.3 修改脚本执行权限
-
使
xsync
脚本具有执行权限:shchmod +x xsync
3.4 测试脚本
-
测试
xsync
脚本是否正常工作:shxsync /path/to/file_or_directory