gpt4 book ai didi

rsync - 通过 rsync 使用文件锁

转载 作者:行者123 更新时间:2023-12-05 01:33:12 30 4
gpt4 key购买 nike

从 rsync 手册文档中,我看到通过使用选项 rsync-path,可以指定要在远程计算机上运行的程序以启动 rsync。特别是,该程序可以是一个包装脚本,它在中间调用实际的 rsync 命令,但它在 rsync 调用之前和/或之后执行一些操作。一个可能有趣的用途是获取/释放锁(例如,flock),以便远程 rsync 的操作可以与远端的另一个进程协调,该进程正在竞争对相同的写访问文件。可能有多个 rsync 进程同时持有共享锁(我知道可能会出现饥饿,但现在并不担心)。我正在处理的“编写器”进程只会更改一些硬链接(hard link),因此它不会在任何重要的时间内阻塞 rsync 进程。

我已经研究过其他协调方法,例如,在客户端和服务器之间实现自定义远程锁定协议(protocol),但它们都涉及更多的开发工作和/或由于其他原因不令人满意,这就是我对包装器感兴趣的原因/(f) 锁定方法。

我的问题是:

1) 这是解决 rsync 'readers' 与另一个访问同一目录的 'writer' 进程协调问题的合理方法吗?

2) 在使用 inetd (或 xinetd) 守护进程方法运行 rsync 时,您是否也可以在 rsync 周围放置一个包装器,方法是在/etc/inetd.conf 中添加类似以下内容的行(根据 rsyncd.conf 手册页):

rsync 流 tcp nowait root/usr/bin/rsync rsyncd --daemon

但是将/usr/bin/rsync 替换为 rsync-lookalike 包装器的路径,在这种情况下,它是一个 C/C++ 代码程序,它获取锁, fork rsync,等待 rsync 完成,然后释放锁.

谢谢,
汤姆

最佳答案

包装器方法的一个潜在问题是:远程进程似乎是用额外的参数调用的,这些参数附加到您使用--rsync-path 指定的任何命令行。因此,如果您需要传递参数,则需要以下样式。

#! /bin/sh

lock_target=$1
shift

if ! lockfile ${lock_target}.lock ; then exit 1 ; fi

trap "rm -f ${lock_target}.lock" EXIT HUP TERM INT

/usr/bin/rsync "$@"

关于rsync - 通过 rsync 使用文件锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20140743/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com