2301_82147806 2025-10-18 23:11 采纳率: 0%
浏览 5

xsync同步脚本问题:目录同步显示成功但实际文件未更新

xsync同步脚本问题:目录同步显示成功但实际文件未更新

问题描述

xsync脚本用于在集群节点间同步文件,但在同步目录时遇到问题。脚本执行显示成功,但目标节点的目录内容没有实际更新。

环境信息

集群节点:node1, node2, node3
执行命令:`sudo xsync bin/`
脚本以root用户执行

脚本内容

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
 echo Not Enough Arguement!
 exit;
fi
 
#2. 遍历集群所有机器
for host in node1 node2 node3
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 exists!
 fi
 done
done

执行输出

[user@node1 /]$ sudo xsync bin/
==================== node1 ====================
root@node1's password: 
root@node1's password: 
sending incremental file list

sent 49 bytes  received 12 bytes  17.43 bytes/sec
total size is 7  speedup is 0.11
==================== node2 ====================
root@node2's password: 
root@node2's password: 
sending incremental file list

sent 49 bytes  received 12 bytes  17.43 bytes/sec
total size is 7  speedup is 0.11
==================== node3 ====================
root@node3's password: 
root@node3's password: 
sending incremental file list

sent 49 bytes  received 12 bytes  17.43 bytes/sec
total size is 7  speedup is 0.11

问题现象

  1. 显示成功:rsync输出显示同步完成,没有报错
  2. 数据量异常:只传输了49字节,总大小显示7字节,明显不正常
  3. 实际未更新:node2和node3的bin目录没有接收到node1中新增的文件
  4. 单个文件正常:测试同步单个文件(如myhadoop.sh)工作正常
  5. 新建目录正常:可以成功分发其他节点不存在的文件夹

已排查信息

  • 脚本以root权限执行,SSH连接成功
  • 路径解析应该正确,因为单个文件同步正常

疑问

为什么目录同步在显示成功的情况下,实际文件没有被更新?可能是什么原因导致xsync认为同步完成但实际上没有传输文件内容?

请各位帮忙分析可能的原因和解决方案!

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-10-18 23:11
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题分析

    根据你的描述,xsync脚本在执行同步目录时显示成功,但实际文件未更新。这可能是由于以下几种原因:

    1. 文件权限问题:目标节点的文件权限可能不允许写入,导致文件未更新。
    2. 文件锁定问题:目标节点上的文件可能被锁定,导致xsync脚本无法更新文件。
    3. 同步选项问题:xsync脚本的同步选项可能不正确,导致文件未更新。
    4. 脚本执行问题:xsync脚本可能执行不正确,导致显示成功但实际文件未更新。

    解决方案

    1. 检查文件权限:确保目标节点的文件权限允许写入。
    2. 检查文件锁定:使用命令 lsoffuser 检查目标节点上的文件是否被锁定。
    3. 检查同步选项:检查xsync脚本的同步选项是否正确,确保选项设置为更新文件。
    4. 检查脚本执行:使用命令 xsync -vxsync -d 检查脚本执行是否正确。

    核心代码

    # 检查文件权限
    ls -ld /目标节点/目录
    
    # 检查文件锁定
    lsof /目标节点/目录
    
    # 检查同步选项
    xsync -h | grep update
    
    # 检查脚本执行
    xsync -v /目标节点/目录
    

    建议

    1. 使用日志记录:在xsync脚本中添加日志记录功能,记录同步过程中的错误信息。
    2. 使用错误处理:在xsync脚本中添加错误处理功能,处理同步过程中的错误信息。
    3. 测试和验证:测试和验证xsync脚本的同步功能,确保其正确性和可靠性。
    评论

报告相同问题?

问题事件

  • 修改了问题 10月18日
  • 创建了问题 10月18日