[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 囉~
(本頁面已被瀏覽過 612 次)