[Linux/Mac] 避免同一個 shell script 重覆執行

[Linux/Mac] 避免同一個 shell script 重覆執行

今天突然意外發現某一個我的 shell script 被重覆執行了好幾次,

因此 ps 裡面看到好幾個 process,

而這些 process 事實上處理同一件事情,是會互相打架的…

 

之前在 Linux 上曾經用過 flock 來解決這個問題,

不過在 Mac 上預設沒有 flock…

查了一下,有人建議使用建立目錄的方式,

來確保同時只有一份 script 在執行,試了一下也確實可行~

 

參考資料:stackoverflow: ensure only one instance of a shell script is running

 

下面就是我寫好的 script~

首先用 mkdir 確認是否這個 lock dir 已經存在,

有的話表示已經有人在執行,所以可以離開了~

沒有的話,用 trap 這個指令,

確保 script (因為任何原因) 結束時,都能砍掉這個 lock dir: 

LOCK_DIR=/tmp/login_vpn.lock
# If there is another same script running, quit.
if ! mkdir "${LOCK_DIR}" >/dev/null 2>&1; then
echo "Another $(basename "$0") is already running!"
exit
fi
# Remove lock dir on exit
trap "rm -rf ${LOCK_DIR}" EXIT
# Do your tasks...

 

用上面這個簡單的方法,就能在沒有 flock 的系統上,

也能輕鬆的實作出 shell script 的 singleton 囉~ 

 

 

(本頁面已被瀏覽過 327 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料