Linux
如何確保一次只有一個實例訪問文件夾中的文件?
我有一個 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
如果無法獲得成功的鎖,則會失敗。