我有一个bash脚本可以并行运行多次,我需要能够检查文件中的值并对其进行修改。理想情况下,我希望首先到达那里的任何脚本实例能够在不受其他实例干扰的情况下进行阅读和写作。我认为我可以用羊群做到这一点,但似乎有些命令会被忽略 - 我猜是因为它们无法锁定?使用flock在bash中读取和写入文件
这是我到目前为止有:
myfunc() {
{ flock -x 3 ; count=$(cat <&3); } 3< countfile
{ flock -x 3 ; echo $((count+1)) >&3; } 3> countfile
}
这是从一个子shell运行,所以我必须通过文件做计数。
因此,两件事情
- 这是没有使用相同的锁读写 - 像我倒是,但我不知道HOWTO做
- 为什么我有时读忽略?
谢谢!
你可能可以用'flock'来做你想要的,假设所有进程都这样做(因为'flock'只提供*任意*锁定)。然而,目前还不清楚你的问题实际上是如何体现的。如果您提供一个可以重现您的问题的最小完整示例,您将获得更好的帮助。 –
您现有的代码锁定文件,读取它,解锁它,再次锁定,写入并解锁它。这显然是不安全的,因为它意味着**第一个锁被释放和第二个锁发生**时,文件可能已被其他人改变。 –