crontab任務衝突

在 Linux 下使用 crontab 執行定時任務,若是任務自身運行時間超過任務執行的間隔時間,就有可能致使兩次任務發生衝突,請問如何控制前一個任務執行完後再啓動下一個任務?shell


      加個文件鎖就OK了。每次任務執行時先判斷鎖文件是否存在,存在則退出任務,不存在則創建鎖文件,任務執行完畢時刪除該文件。在超出crontab執行的間隔時間的狀況下,若是你還想繼續執行以前沒有執行的任務,則須要在腳本中判斷當次任務執行時間,若是超過了crontab的間隔時間,那麼在當前任務結束時進行系統調用執行該定時任務。bash


flock使用ide

  flock,建議性鎖,不具有強制性。一個進程使用flock將文件鎖住,另外一個進程能夠直接操做正在被鎖的文件,修改文件中的數據,緣由在於flock只是用於檢測文件是否被加鎖,針對文件已經被加鎖,另外一個進程寫入數據的狀況,內核不會阻止這個進程的寫入操做,也就是建議性鎖的內核處理策略。進程


-s, --shared:    得到一個共享鎖  crontab

-x, --exclusive: 得到一個獨佔鎖  it

-u, --unlock:    移除一個鎖,一般是不須要的,腳本執行完會自動丟棄鎖  class

-n, --nonblock:  若是沒有當即得到鎖,直接失敗而不是等待  test

-w, --timeout:   若是沒有當即得到鎖,等待指定時間  date

-o, --close:     在運行命令前關閉文件的描述符號。用於若是命令產生子進程時會不受鎖的管控  定時任務

-c, --command:   在shell中運行一個單獨的命令  


[root@db52 tmp]# cat /tmp/test.sh

#!/bin/bash


echo "Hello World"

sleep 10


[root@db52 tmp]# crontab -l

#crond-id-001:time sync

*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1


#crond-id-002:test

* * * * * /usr/bin/flock -xn /tmp/test.lock -c "/bin/sh /tmp/test.sh" >/dev/null 2>&1

相關文章
相關標籤/搜索