Bash

控制 bash 腳本並發,flock 繼承

  • July 12, 2014

我有一個 bash 部署腳本,它處理將更新的程式碼部署到 CentOS 上的 Tomcat 實例,但是,Chef 和 RunDeck 都可能呼叫該腳本,並且由於 Chef 定期執行,因此有可能發生衝突。

如何防止部署腳本同時執行兩次?

標準答案似乎是將部署邏輯包裝在flock.

但是,由於部署重新啟動了不起作用的 tomcat——新的 java 程序繼承了鎖並阻止了任何進一步的部署腳本執行。

是否有其他方法可以防止並發執行或防止flock繼承?

flock您可以在執行要解鎖的程序之前關閉維護鎖定的文件描述符。

(
 flock -n 9 || exit 120
 …
 (exec 9>&-; tomcat &)
) 9>/var/run/my.lock

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