Lock

有沒有一種非常簡單可靠的方法可以在 linux 上創建一個唯一的鎖(文件)?不使用flock

  • January 22, 2021

編輯:我學會瞭如何使用flock進行排他鎖以及如何不弄亂它:https ://superuser.com/questions/1619940/flock-is-randomly-failing-on-desktop-pc-but-not-on -筆記本可能有缺陷/。我認為這個問題是不必要的,因為除了羊群之外沒有必要使用其他任何東西。但是……“重複刪除已回答的問題可能會導致您的帳戶被阻止詢問。您確定要刪除嗎?” 我不會刪除這個問題以免弄亂我的帳戶。如果留在這裡也可能有助於人們理解和使用flock。隨意刪除它。


舊的不必要的問題

例如:我想創建一個文件鎖以防止同時備份同一文件的嘗試,每次我啟動一個新終端時都會執行它,就像在可以同時啟動多個命名選項卡的 guake 上一樣。

我不想使用flock. 我很難理解和嘗試使用它:(

我認為最大的問題是flock -x asdf.txtasdf.txt 是一個真實存在的文件,它給出了“flock: bad file descriptor: ‘asdf.txt’”,這感覺不像是使用者友好的實現。我從手冊頁中得到了那個例子,我又被卡住了。感覺好像我無法解釋這個問題,但問題出在我的測試案例(答案)上:我需要一個文件鎖來專門做事情,而我總是很難用羊群來做到這一點。 .

只需使用 ShellShoccar -jpn/misc-tools 中的四個 shellscript 命令:pexlock、pshlock、punlock 和 pcllock ;排他鎖和共享鎖分別用(set -C; :>filename)和實現mkdir,因此它不僅對 GNU/Linux 有用,對任何其他 POSIX 環境也有用。

我一直在使用符號連結創建重試,如下所示:

while true;do
 if ln -s "/a/b/c/myExisingRealFile.ext" /tmp/myFileSymlink.lock 2>/dev/null;then
   : #do something
   rm /tmp/myFileSymlink.lock
   break
 fi
done

用(bash) myLockTest.sh 測試:

#!/bin/bash

echo "the idea is: after every OK must always follow a single REMOVED"
echo "so also no subsequent OKs."

echo >/tmp/tstMyScript.sh;
export strLock="/tmp/tstUniqueLock.lock";
rm -v "$strLock" 2>/dev/null;

trap -- "echo EXIT;rm -v "$strLock"" EXIT
trap -- "echo INT;rm -v "$strLock"" INT

FUNClock(){ 
n=0;
while true;do 
 if ln -s "/tmp/tstMyScript.sh" "$strLock" 2>/dev/null;then 
  echo "$n:$BASHPID:ok";
  rm -v "$strLock"; 
  break;
 fi;
 echo "$n:$BASHPID:retry:$((++n))";
 sleep 0.25
done;
};export -f FUNClock;
for((i=0;i<100;i++));do FUNClock&:;done # lower from 100 to 1 if you are unsure, then increase slowly

如果還有其他簡單易懂和使用的方法,我很想知道!

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