前言
當shell腳本中需要執行的步驟較多、耗時較長時,爲了避免腳本被其它進程重複執行導致操作邏輯被打亂,需要使該腳本同一時間內只能被一個進程執行,類似C# 中的lock 代碼塊操作,確保線程安全
代碼
#!/bin/bash
# 創建文件鎖路徑
lock_file=/tmp/my_script.lock
# 信號處理函數
function cleanup() {
rm -f "$lock_file"
exit 1
}
# 在中斷和退出腳本執行時,刪除掉文件鎖
trap cleanup 2 Exit
# 使用 flock 命令創建文件鎖並執行腳本
(
flock -n 9 || {echo "script is executing by another process! exited";exit 1;}
# 此處爲腳本主要內容
echo "Start executing the script..."
#do something
echo "Finish executing the script."
exit 0
) 9>"$lock_file"