linux中防止shell指令碼重複執行

來源:互聯網
上載者:User

今天在jenkins裡部署的時候,由於開發們多次頻繁的提交的代碼,造成jenkins裡的shell指令碼在那頻繁的部署,為了阻止這樣的問題,專門找了個防止重複執行的代碼.下面來看代碼:
#!/bin/bash
 
LOCK_NAME="/tmp/my.lock"
if ( set -o noclobber; echo "$$" > "$LOCK_NAME") 2> /dev/null;
then
        trap 'rm -f "$LOCK_NAME"; exit $?' INT TERM EXIT
 
       
### 開始正常流程
       
### 正常流程結束
 
       
### Removing lock
        rm -f $LOCK_NAME
        trap - INT TERM EXIT
else
        echo "Failed to acquire lockfile: $LOCK_NAME."
        echo "Held by $(cat $LOCK_NAME)"
        exit 1
fi
 
echo "Done."
這樣就能保證my.lock只能被一個進程建立出來。比touch靠譜多了。
trap 可以捕獲各種訊號,然後做出處理:
INT 用來處理 ctrl+c取消指令碼執行的情況。
TERM 用來處理 kill -TERM pid 的情況。
EXIT 不清楚
另外,對於 kill -9 無效.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.