You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于脚本运行数据中心生成机器数组及SCP传输需求

动态生成SCP主机列表的Shell脚本实现

针对你提出的跨数据中心机器选择需求,我整理了一个实用的Shell脚本方案,既能根据脚本运行的当前数据中心自动选定本地执行主机,又能在本地主机故障时自动切换到备用节点完成SCP传输。

#!/bin/bash

# 原始机器列表:三台分属不同数据中心的机器
machines=(
    "machineA.abc.host.com"
    "machineB.def.host.com"
    "machineC.xyz.host.com"
)

# 1. 确定当前运行的 data center
# 优先使用环境变量(方便手动指定),否则从当前主机名提取
if [ -n "$RUNNING_DC" ]; then
    current_dc="$RUNNING_DC"
else
    # 假设当前主机名格式类似:server.abc.host.com,提取中间的dc部分
    current_dc=$(hostname | awk -F'.' '{print $2}')
fi

# 2. 匹配本地主机并生成远程主机列表
local_host=""
remote_hosts=()

for machine in "${machines[@]}"; do
    # 提取机器所属的dc
    machine_dc=$(echo "$machine" | awk -F'.' '{print $2}')
    if [ "$machine_dc" = "$current_dc" ]; then
        local_host="$machine"
    else
        remote_hosts+=("$machine")
    fi
done

# 3. 检测主机是否可达的辅助函数
is_host_reachable() {
    local host="$1"
    # 用SSH连通性测试更贴合SCP场景(替换ping也可以)
    ssh -q "$host" exit > /dev/null 2>&1
    return $?
}

# 4. 执行SCP传输逻辑
source_file="/path/to/local/source/file"
dest_path="/path/to/remote/destination/"

# 先尝试使用本地主机发起SCP
if [ -n "$local_host" ] && is_host_reachable "$local_host"; then
    echo "使用本地主机 *$local_host* 执行SCP传输..."
    for remote in "${remote_hosts[@]}"; do
        scp "$source_file" "$remote:$dest_path"
        if [ $? -eq 0 ]; then
            echo "✅ 成功传输到 $remote"
        else
            echo "❌ 传输到 $remote 失败"
        fi
    done
else
    # 本地主机不可用,切换到远程主机作为执行节点
    echo "本地主机 *$local_host* 不可达,切换到备用远程节点执行..."
    for exec_host in "${remote_hosts[@]}"; do
        if is_host_reachable "$exec_host"; then
            echo "使用备用节点 *$exec_host* 发起传输..."
            # 注意:若用远程节点执行,需确保源文件可被该节点访问(比如共享存储/预同步)
            scp "$source_file" "$exec_host:$dest_path"
            break  # 找到第一个可用节点就停止
        fi
    done
fi

关键逻辑说明

  • 灵活的DC检测:支持手动通过环境变量RUNNING_DC指定数据中心(比如测试时用RUNNING_DC=abc ./script.sh),也能自动从当前主机名解析DC,适配不同运行场景。
  • 自动筛选主机:遍历原始机器数组,根据域名中的DC段自动区分本地主机和远程主机列表,无需硬编码。
  • 故障切换机制:优先使用本地主机发起传输,当本地主机SSH不可达时,自动遍历备用远程节点,找到第一个可用节点执行传输。
  • 可定制的可达性检测:默认用SSH连通性测试(更贴合SCP依赖的协议),你也可以换成ping快速检测,根据需求调整。

注意:如果使用备用远程节点执行SCP,要确保源文件能被该节点访问——比如放在共享存储,或者先把源文件同步到备用节点后再执行传输,可根据实际环境调整这部分逻辑。

内容的提问来源于stack exchange,提问作者flash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:35:01