首頁 > 軟體

Linux 限制兩個shell指令碼同時執行

2020-06-16 17:21:58

Linux 限制兩個shell指令碼同時執行,問題出現的原因,由於現在髮版是用通過執行指令碼,都會都過mvn打包,同時執行導致問題。

解決方案在指令碼執行前,檢查、加鎖、、、

#!/bin/bash
{
flock -n 3
if [ $? -eq 1 ]
then
    echo "other sh running"
    while [ 1 ]
    do
        flock -n 3
        [ $? -ne 1 ]&&break;
        sleep 1
       
    done
    3<>/tmp/.lock
fi
    echo "lock and wait"
    sleep 10
} 3<>/tmp/.lock
 
非阻塞方式,沒有鎖,加鎖繼續往下執行,有鎖迴圈檢查,直到沒有鎖再繼續執行。
 
選項和引數:
-s,--shared:獲取一個共用鎖,在定向為某檔案的FD上設定共用鎖而未釋放鎖的時間內,其他進程試圖在定向為此檔案的FD上設定獨佔鎖的請求失敗,而其他進程試圖在定向為此檔案的FD上設定共用鎖的請求會成功。
-x,-e,--exclusive:獲取一個排它鎖,或者稱為寫入鎖,為預設項
-u,--unlock:手動釋放鎖,一般情況不必須,當FD關閉時,系統會自動解鎖,此引數用於指令碼命令一部分需要非同步執行,一部分可以同步執行的情況。
-n,--nb, --nonblock:非阻塞模式,當獲取鎖失敗時,返回1而不是等待
-w, --wait, --timeout seconds:設定阻塞超時,當超過設定的秒數時,退出阻塞模式,返回1,並繼續執行後面的語句
-o, --close:表示當執行command前關閉設定鎖的FD,以使command的子進程不保持鎖。
-c, --command command:在shell中執行其後的語句

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-02/140359.htm


IT145.com E-mail:sddin#qq.com