這個方案目前已經是比較成熟,主要是結合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:顯示版本。
具體實現
如下面的實例,原計劃每5秒執行一次test腳本,同時產生test.lock文件,如果5秒時間前一個進程沒有執行完,後面一個進程發起了,便會放棄本次操作。
*/5 * * * * flock -x -n /tmp/test.lock -c '/test.sh'
每天進步一點點,更多精彩內容,歡迎關注公衆號“編程社”!!!