一般情況下,我們利用crontab執行計劃任務,間隔都不會太短,比如一天一次,甚至一週乃至一月一次。
所以一般而言,這都不會有什麼問題。
但是如果在某些極端情況下:例如我們需要每次執行的計劃任務需要完全結束,纔可以執行下一次,否則會導致出問題。
那麼這個時候【文件鎖】(flock)就發揮作用了。
下面介紹一個簡單的文件鎖(flock)用法:
常見的參數:
flock -xn 鎖文件 -c "shell"
flock -x 鎖文件 -c "shell"
以上內容看起來不太直觀,那麼先來解釋一下:
flock是文件鎖的命令,兩行的參數相差一個 n ,第一行 -xn, 使用這個參數,當執行發現文件被鎖,則後面的shell命令/腳本直接執行失敗。第二行則不同,單獨使用 -x 時,如果發現文件被鎖,則會等待文件鎖解除時,再執行後面的shell命令/腳本。
注意,在這裏,【鎖文件】本身沒有實在的意義,它只是一個標記,所以可以手工隨意touch一個。
下面是我 crontab 的其中一行:
*/1 * * * * flock -x /root/file.lock -c "sh /root/file.sh"