集群环境中分发文件的脚本

由于在集群中手动分发文件较为麻烦,这里记录一下自动分发脚本。

1 脚本说明

该脚本用于将文件分发到远程设备。默认分发文件的路径为脚本所在路径,默认分发目标地址为node1node2。可以在启动脚本时手动输入分发文件的路径和目标设备地址,并可以选择使用 scp 或 rsync 进行文件传输。如果目标设备不存在相同地址会自动创建。

2 脚本代码

可以根据实际情况修改默认参数。

#!/bin/bash

# 默认参数
DEFAULT_PATH=$(pwd)
DEFAULT_TARGETS=("node1" "node2")
DEFAULT_METHOD="rsync"

# 函数:检查是否安装了指定的命令
check_command() {
    command -v "$1" >/dev/null 2>&1 || {
        echo "Error: $1 is not installed. Please install it and try again."
        exit 1
    }
}

# 检查所需的命令
check_command "scp"
check_command "rsync"

# 函数:将相对路径转换为绝对路径
get_absolute_path() {
    local path="$1"
    echo "$(cd "$path" && pwd)"
}

# 函数:显示用法信息
usage() {
    echo "Usage: $0 [-p <path>] [-t <target1,target2,...>] [-m <scp|rsync>]"
    exit 1
}

# 解析输入参数
while getopts "p:t:m:" opt; do
    case "$opt" in
        p) FILE_PATH=$OPTARG ;;
        t) IFS=',' read -r -a TARGETS <<< "$OPTARG" ;;
        m) METHOD=$OPTARG ;;
        *) usage ;;
    esac
done

# 设置默认值
FILE_PATH=${FILE_PATH:-$DEFAULT_PATH}
FILE_PATH=$(get_absolute_path "$FILE_PATH")
METHOD=${METHOD:-$DEFAULT_METHOD}
if [ -z "${TARGETS+x}" ]; then
    TARGETS=("${DEFAULT_TARGETS[@]}")
fi

# 检查方法是否有效
if [[ "$METHOD" != "scp" && "$METHOD" != "rsync" ]]; then
    echo "Error: Method must be either 'scp' or 'rsync'."
    usage
fi

# 函数:创建远程目录
create_remote_dir() {
    local target=$1
    ssh "$target" "mkdir -p $FILE_PATH"
}

# 函数:使用SCP分发文件,显示进度条
distribute_scp() {
    local target=$1
    scp -r "$FILE_PATH"/* "$target:$FILE_PATH"
}

# 函数:使用Rsync分发文件,显示进度条
distribute_rsync() {
    local target=$1
    rsync -avz --progress "$FILE_PATH"/* "$target:$FILE_PATH"
}

echo "Source Path: $FILE_PATH"
# 分发文件
for target in "${TARGETS[@]}"; do
    echo "Target Path: $target:$FILE_PATH"
    
    # 检查并创建远程目录
    create_remote_dir "$target"
    
    # 分发文件
    if [[ "$METHOD" == "scp" ]]; then
        distribute_scp "$target"
    else
        distribute_rsync "$target"
    fi
    
    echo "Files distributed to $target using $METHOD."
done

echo "File distribution completed."

3 使用说明

3.1 基本用法

./distribute_files.sh

3.2 选项说明

  • -p <path>:指定分发文件的路径,默认为脚本所在路径。
  • -t <target1,target2,...>:指定分发目标地址,默认为node1node2。多个地址使用逗号分隔,且不要加空格。
  • -m <scp|rsync>:选择使用scprsync进行文件传输,默认为scp。建议首次传输使用scp,之后的传输使用rsync

3.3 示例用法

  1. 使用默认参数执行脚本

    ./distribute_files.sh
    

    分发脚本所在路径的文件到node1node2,使用 rsync 进行传输。

  2. 指定分发路径和目标地址

    ./distribute_files.sh -p /path/to/files -t node1,node2,node3
    

    分发/path/to/files路径下的文件到node1node2node3,使用 rsync 进行传输。

  3. 指定使用 scp 进行分发

    ./distribute_files.sh -m scp
    

    分发脚本所在路径的文件到node1node2,使用 scp 进行传输。

4 注意事项

  1. 确保目标设备已经配置了 SSH 访问权限,并且本地设备能够通过 SSH 连接到目标设备。
  2. 分发文件路径和目标地址需要用户有相应的读写权限。
  3. 在首次使用时,请先测试连接是否正常,以避免大规模文件分发失败。
  4. 请确保本地和远程设备上可以使用必要的命令(scprsync)。
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值