【发布时间】:2015-11-18 20:36:04
【问题描述】:
我有一个可以并行运行多次的 bash 脚本,我需要能够检查文件中的值并对其进行修改。理想情况下,我希望首先到达那里的任何脚本实例都能够在不受另一个实例干扰的情况下进行读取和写入。我想我可以用flock来做到这一点,但似乎有些命令被忽略了——我猜是因为他们无法获得锁?
这是我目前所拥有的:
myfunc () {
{ flock -x 3 ; count=$(cat <&3); } 3< countfile
{ flock -x 3 ; echo $((count+1)) >&3; } 3> countfile
}
这是从子 shell 运行的,所以我必须通过文件进行计数。
所以,有两件事
- 这不是使用同一个锁来读写——我想要,但我不知道怎么做
- 为什么有时会忽略我的读取?
谢谢!
【问题讨论】:
-
你可能可以用
flock做你想做的事,假设所有进程都同意这样做(因为flock只提供自主 锁定)。但是,尚不清楚您的问题实际上是如何表现出来的。如果您提供一个最小的、完整的示例,我们可以重现您的问题,您将获得更好的帮助。 -
您现有的代码会锁定文件、读取文件、解锁文件、再次锁定文件、写入文件和解锁文件。这显然是不安全的,因为这意味着文件可能在第一个锁被释放和第二个锁发生之间被其他人更改。
标签: bash parallel-processing flock