簡體   English   中英

bash 聚集一個輸出文件

[英]bash flock an output file

如果多個進程可能正在寫入同一個輸出文件,那么將輸出文件本身而不是單獨的鎖定文件聚集在一起是否安全?

例如,這安全嗎?

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

是的,在給定的特定(狹義)使用模式內,您提出的建議是安全的。

您可以使用單個文件安全地做的事情

  • 在尚未持有鎖的情況下打開文件以僅用於追加
  • 僅在持有鎖后截斷文件
  • 以不更改目錄條目所指的 inode 的方式在持有鎖時修改文件。

你只能用兩個單獨的文件做的事情

  • 最初使用O_TRUNC打開鎖文件。
  • 使用創建和重命名模式在持有鎖的同時自動修改數據文件。
  • rm一樣,完全刪除數據文件——確保任何新創建的版本獲得不同的 inode——同時持有鎖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM