天天看點

用flock指令解決Linux計劃任務重複執行

在做計劃任務的時候,可能由于某些問題,任務沒有執行完成,導緻任務重複的運作,解決這個問題,隻需要一個flock指令就可以了。

flock --help

flock (util-linux-ng 2.17.2)

usage: flock -sxun fd#

flock -sxon file [-c] command...

flock -sxon directory [-c] command...

-s --shared get a shared lock #獲得一個共享鎖

-x --exclusive get an exclusive lock #獲得一個獨占鎖,這是預設的

-u --unlock remove a lock #删除一個鎖,通常是不需要的,因為在檔案關閉時鎖會自動删除

-n --nonblock fail rather than wait #如果沒有立即獲得鎖,直接失敗而不是等待

-w --timeout wait for a limited amount of time #如果沒有立即獲得鎖,等待指定時間

-o --close close file descriptor before running command #在執行指令之前關閉保持鎖的檔案描述符

-c --command run a single command string through the shell #在shell中運作一個單獨的指令

-h --help display this text #顯示幫助

-v --version display version #顯示版本

例:

我要用rsync計劃任務做同步,寫了一個rsync同步腳本whsir.sh,設定了30分鐘同步一次服務端,但是可能由于其他某些因素導緻,30分鐘内沒有同步完成,背景還會繼續執行此計劃任務,此時就能看到兩個rsync同步同時在跑,這時候我們就需要flock指令來解決問題了。

原來我的計劃任務:

/30 * /www/whsir.sh

使用flock後的計劃任務:

/30 * flock -xn /tmp/demo.lock -c /www/whsir.sh

這樣的話,目前計劃任務whsir.sh如果沒有運作完,下一個任務會判斷demo.lock被鎖定,直接失敗,等待下次在判斷。

繼續閱讀