Bash-Script

如何確保腳本以獨占方式執行?

  • March 11, 2014

所以我有一個 bash 腳本,它可以做一些非常基本的事情(從 github 中提取、刪除文件夾……等等……)。當我需要在伺服器上安裝新版本的 Web 應用程序時,我通常會執行它。

問題是沒有任何東西可以阻止這個腳本被不同的人同時執行(幾乎所有的開發人員都連接到這個伺服器並且他們執行相同的命令)。

到目前為止,腳本一次由超過 1 個開發人員執行的情況並未發生。

如果該腳本已經被其他使用者執行,我如何確保它不能執行?文件夾鎖定或檢查腳本是否由另一個使用者執行(這是可行的嗎?)別的什麼?

所有可以執行此腳本的使用者都是 sudoers。

編輯:好吧,在檢查了我的同事之後發現並非所有人都在使用腳本..他們中的一些人正在手動執行命令,所以我需要鎖定文件夾本身。

群 - 管理來自 shell 腳本的鎖

man flock

例如

群 -x 鎖定文件 -c 命令

將這些行放在您的腳本中也可以。(對不起,我忘了我將互斥鎖定義為一個函式)。

mutex() {
   if ( set -o noclobber; echo "$$" > "$1") 2> /dev/null; then
           trap "rm -f \"$1\"; exit \$?" INT TERM EXIT KILL
           return 0
   else
           return 1
   fi
}

mutex .LOCKFILE || { echo "Another instance of $0 still exists"; exit 1; }

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