一、現象
有一個定時任務,每分鍾執行一次,前一分鍾還沒有執行完成,下一個分鍾就來了,怎么解決。
二、模擬
#!/bin/bash echo "開始 `date` " >> /lile/shell/ll.txt sleep 70 echo "結束 `date` " >> /lile/shell/ll.txt
*/1 * * * * /bin/sh /lile/shell/test_cron.sh
輸出結果:不是一個執行完,再執行下一個的結果
三、解決辦法:
使用文件鎖flock,使用文件鎖的文件可以是任意文件
*/1 * * * * flock -xn /lile/shell/test_cron.sock -c '/bin/sh /lile/shell/test_cron.sh'
輸出結果:
這樣的話,當前一個任務沒有執行完,后一個任務就來了的話,是不會執行的,會直到這個任務執行完成后,然后一個周期的時候再執行
四、flock常用參數(man flock)
-s:獲取一個共享鎖
-x :獲得一個獨占鎖
-u:解除鎖
-n:如果獲取鎖失敗立即返回而不是等待
-w:如果獲取鎖失敗等待的時間
-c:在shell中允許一個命令