我正在尝试写一篇文章,我正在尝试在 ${File} 和 ${File}.new 之间进行文件交换
原始代码是这样的 -
generate ${File}.new
mv ${File} ${File}.backup
mv ${File}.new ${File}
在某些情况下它失败了,当第一个 mv 完成但第二个 mv 尚未完成时,可能会请求 ${File}。并且该请求被拒绝,因为该文件不可用该名称。很少发生,但仍然发生(昨天发生,这是 6 周内的第一次)
为避免这种情况,我考虑替换mv
为cp
,因此,我正在尝试构建这样的东西 -
generate ${File}.new
cp ${File} ${File}.backup
cp ${File}.new ${File}
rm ${File}.new
现在,我的挑战是,在我写入 ${File} 的那一刻,如果有一个进程在那个时候读取它,复制可能会失败,说它无法获得对象上的锁。
我对失败的恐惧真的有根据吗?
我想告诉程序等待几秒钟/几分钟,然后再试一次,而不是失败。
我在带有 korn shell 的 AIX 6.1 上。