天天看點

linux使用flock解決crontab任務沖突

Linux的crontab最小的間隔是每分鐘執行一次,但是如果在這一分鐘之内,之前的指令并沒有執行完成呢?這樣就會産生沖突。接下來我介紹一個解決沖突的辦法,那就是linux的flock檔案鎖.

格式:

flock [-sxun][-w #] fd#

flock [-sxon][-w #] file [-c] command

參數是:

-s, --shared:    獲得一個共享鎖
-x, --exclusive: 獲得一個獨占鎖
-u, --unlock:    移除一個鎖,通常是不需要的,腳本執行完會自動丢棄鎖
-n, --nonblock:  如果沒有立即獲得鎖,直接失敗而不是等待
-w, --timeout:   如果沒有立即獲得鎖,等待指定時間
-o, --close:     在運作指令前關閉檔案的描述符号。用于如果指令産生子程序時會不受鎖的管控
-c, --command:   在shell中運作一個單獨的指令
-h, --help       顯示幫助
-V, --version:   顯示版本      

下面是在crontab中的使用:

* * * * * flock -xn /tmp/aaa.lock -c 'php /home/aaa.php >> /home/aaa.log' . //-xn  檔案鎖使用獨占鎖,如果鎖定則失敗不等待。