如何确保文件夹中一次只有一个实例访问该文件?

如何确保文件夹中一次只有一个实例访问该文件?

我有一个 shell 脚本,该脚本将由多个实例执行,如果一个实例访问文件并执行某些操作,我如何确保其他实例不会访问同一文件并损坏数据?

我的问题不是关于控制并行执行,而是处理文件锁定或标记机制。

请求一些建议以继续。

答案1

Linux 通常不执行任何锁定(与 Windows 不同)。这有很多优点,但如果您必须锁定文件,您有多种选择。我建议

群:在打开的文件上应用或删除咨询锁

该实用程序从 shell 脚本内或从命令行管理集群(2)锁。

对于单个命令(或整个脚本),您可以使用

flock --exclusive /var/lock/mylockfile -c command

如果您想在锁定下执行脚本中的更多命令,请使用

#!/bin/bash
 .... 

(
flock --nonblock 200 || exit 1
# ... commands executed under lock ...
) 200>/var/lock/mylockfile 

仅当当前没有其他进程持有 on 时,才会执行子flockshell 内调用之后的所有操作。子 shell 退出后,锁会自动解除。(...)flock/var/lock/mylockfile

flock也可以等到文件锁被删除(这是默认设置)。在这种情况下,请勿使用该--nonblock选项,flock如果无法成功获得锁定,则会导致失败。

相关内容