Linux

如何確保一次只有一個實例訪問文件夾中的文件?

  • October 28, 2014

我有一個 shell 腳本,它將由多個實例執行,如果一個實例訪問一個文件並執行一些操作,我如何確保其他實例沒有訪問同一個文件並破壞數據?

我的問題不是關於控制並行執行,而是處理文件鎖定或標記機制。

請求一些建議以繼續。

Linux 通常不做任何鎖定(與 Windows 相反)。這有很多優點,但是如果您必須鎖定文件,您有幾個選擇。我建議

群:對打開的文件應用或刪除諮詢鎖

該實用程序從 shell 腳本或命令行管理flock(2) 鎖。

對於單個命令(或整個腳本),您可以使用

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

如果要在腳本中執行更多命令,請使用

#!/bin/bash
.... 

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

僅噹噹前沒有其他程序持有on 時flock,子外殼內呼叫之後的所有操作才會執行。子shell退出後,鎖會自動解除。(...)``flock``/var/lock/mylockfile

flock也可以等到文件鎖被刪除(這是預設設置)。在這種情況下,不要使用該--nonblock選項,flock如果無法獲得成功的鎖,則會失敗。

引用自:https://unix.stackexchange.com/questions/164574