Centos集群同步文件脚本xsync

第一次使用需要安装rsync

yum -y install rsync

创建执行文件

vi /usr/local/bin/xsync

执行权限

chmod a+x /usr/local/bin/xsync

bash 复制代码
#!/bin/bash

# 获取输出参数,如果没有参数则直接返回
pcount=$#
if [ $pcount -eq 0 ]
then
	echo "no parameter find !";
	exit;
fi

# 获取传输文件名
p1=$1
filename=`basename $p1`
echo "load file $p1 success !"

# 获取文件的绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo "file path is $pdir"

# 获取当前用户(如果想使用root用户权限拷贝文件,在命令后加入-root参数即可)
user=$2
case "$user" in
"-root")
	user="root";;
"")
	user=`whoami`;;
*)
	echo "illegal parameter $user"
	
esac

echo $user
# 拷贝文件到从机(这里注意主机的host需要根据你的实际情况配置,要与你具体的主机名对应)
for (( host=2;host<=5;host++ ))
do 
	echo "================current host is bigdata0$host================="
  # -p 保持文件原有权限
  # -g 保持文件原有用户组
  # -o 保持文件原有属主
  rsync -rvlpgo $pdir/$filename $user@bigdata0$host:$pdir
done

echo "complate !"
复制代码
#!/bin/bash

# 显示帮助信息
show_help() {
    echo "Usage: $0 [-i <host1> <host2> ... | -f <file> | -h] <command>"
    echo "  -i <host1> <host2> ...   Specify a list of hosts to execute the command on."
    echo "  -f <file>               Specify a file containing a list of hosts, one per line."
    echo "  -h                      Show this help message."
    echo "  <command>                The command to execute on the remote hosts."
    echo ""
    echo "Examples:"
    echo "  $0 /path/file"
    echo "  $0 -i \"bigdata01 bigdata02\" /path/file"
    echo "  $0 -f hosts.txt /path/file"
}

# 默认主机列表
default_hosts=("bigdata01" "bigdata02" "bigdata03" "bigdata04" "bigdata05")

# 读取主机列表,如果没有指定 -i 或 -f,则使用默认值
hosts=("${default_hosts[@]}")

# 解析参数
while getopts "f:i:h" opt; do
    case $opt in
        f)
            # 如果提供了 -f 参数,则读取文件中的主机列表
            hosts_file="$OPTARG"
            if [ ! -f "$hosts_file" ]; then
                echo "Error: File not found - $hosts_file"
                exit 1
            fi
            mapfile -t hosts < "$hosts_file"
            ;;
        i)
            # 如果提供了 -i 参数,则将后面的参数作为主机列表
            hosts=()
            IFS=' ' read -ra hosts <<< "$OPTARG"
            ;;
        h)
            show_help
            exit 0
            ;;
        \?)
            echo "Invalid option: -$OPTARG" >&2
            exit 1
            ;;
        :)
            echo "Option -$OPTARG requires an argument." >&2
            exit 1
            ;;
    esac
done

# 移除解析过的参数,留下命令
shift $((OPTIND -1))
if [ $# -eq 0 ]; then
    echo "No command provided."
    show_help
    exit 1
fi

# 获取传输文件名
p1=$1
filename=`basename $p1`
echo "load file $p1 success !"

# 获取文件的绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo "file path is $pdir"

# 获取当前用户(如果想使用root用户权限拷贝文件,在命令后加入-root参数即可)
user=$(whoami)
echo "User: $user"

# 拷贝文件到从机(这里注意主机的host需要根据你的实际情况配置,要与你具体的主机名对应)
for host in "${hosts[@]}";
do 
  # 拷贝文件到从机,跳过当前主机
  if [ "$host" == "$(hostname)" ] || [ "$host" == "$(hostname -I | awk '{print $1}')" ];  then
        echo "Skipping current host: $(hostname)"
        continue
  fi
	echo "================current host is $host================="
  # SSH到目标主机并检查目录是否存在,如果不存在则创建
  ssh $user@$host "mkdir -p '$pdir'"
  # -p 保持文件原有权限
  # -g 保持文件原有用户组
  # -o 保持文件原有属主
  rsync -rvlpgo $pdir/$filename $user@$host:$pdir
done

echo "complate !"
相关推荐
ベadvance courageouslyミ8 小时前
系统编程之进程
linux·进程·pcb结构体
松涛和鸣8 小时前
29、Linux进程核心概念与编程实战:fork/getpid全解析
linux·运维·服务器·网络·数据结构·哈希算法
代码不行的搬运工8 小时前
显式拥塞通知(ECN)机制
运维·服务器·网络·算力网络
BJ_Bonree8 小时前
Bonree ONE 发布直通车| 如何利用核心链路,快速排查定位系统故障?
大数据·运维·人工智能
南棱笑笑生8 小时前
20251211给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-6.1】系统时适配adb【type-C0】
linux·c语言·adb·rockchip
科士威传动8 小时前
微型导轨的类型性能差异与场景适配需求
大数据·运维·人工智能·科技·机器人·自动化
Yengi8 小时前
【test】gtkmm-环境搭建
linux
乾元8 小时前
OSPF / BGP 自动化设计与错误避坑清单—— 控制平面是“算出来的”,不是“敲出来的”
运维·网络·人工智能·平面·华为·自动化
Lightning-py9 小时前
SSH远程连接服务器耗时>10s
linux·服务器·网络
starvapour9 小时前
基于端口转发部署seafile私人云盘服务器
linux·ubuntu·seafile