bash聚集输出文件

时间:2019-04-16 21:24:45

标签: bash flock

如果可能有多个进程正在写入同一个输出文件,那么将输出文件本身植绒而不是单独的锁定文件是否安全?

例如这样安全吗?

outputFile=output.dat
exec 200>>"$outputFile"
flock -e 200
grep -i error "$1" >> "$outputFile"
flock -u 200

我在flock中找到的所有示例都使用单独的锁定文件。

例如

outputFile=output.dat
lockFile=/var/tmp/output.dat
exec 200>"$lockFile"
flock -e 200
grep -i error "$1" >> "$outputFile"
flock -u 200

1 个答案:

答案 0 :(得分:1)

是的,在给定的特定(狭窄)使用模式内,您的建议是安全的。

您可以安全地处理单个文件

  • 打开文件仅用于添加,而无需按住锁。
  • 仅在锁定后才截断文件
  • 在保持锁的状态下修改文件,其方式不会改变目录条目所引用的inode

您只能使用两个单独的文件进行的操作

  • 最初使用O_TRUNC打开锁定文件。
  • 在保持锁定状态时,使用创建和重命名模式自动修改数据文件。
  • rm一样,完全删除数据文件-确保所有新创建的版本在持有锁的同时都获得不同的inode。