1.問題引出:crond實現定時任務的思路
crond服務預設情況每分鐘檢查系統中是否有需要執行的定時任務,如果有,就會根據事先定義好的規則來執行這個定時任務,而crond配置的書寫語法中:「* * * * * command」,最低的時間單位是分鐘,所以說,乙個crond定時任務最多只能執行分鐘級的定時任務,這是顯然的!但事實情況是,利用crond也是可以實現秒級的定時任務的,既然乙個定時任務真的就只能實現分鐘級的定時任務,那我幾個定時任務同時實現乙個功能,是否有可能達到秒級???
2.實際案例:利用crond實現每二十秒的定時任務
請先看下面的定時任務書寫:
* * * * * /bin/echo "hello" >> /server/scripts/hello.log看了上面的三條語句,懂思路的人相信已經知道如何利用crond來實現秒級的定時任務。上面這三條語句大致相同,無非就是想做下面的一件事:* * * * * sleep 20;/bin/echo "hello" >> /server/scripts/hello.log
* * * * * sleep 40;/bin/echo "hello" >> /server/scripts/hello.log
/bin/echo "hello" >> /server/scripts/hello.log即實際上,三條語句(其實準確點說是三個定時任務)的最終目的是一樣的,至於為何它就能實現每20秒一次的定時任務,請看下面的分析:
a.crond服務每分鐘檢查系統中的定時任務
b.計時開始,三個定時任務同時執行:
執行第乙個定時任務時,便輸出資料到hello.log;
執行第二個定時任務時,先休息20秒(sleep 20),再準備該定時任務下乙個命令的執行;
執行第三個定時任務時,先休息40秒(sleep 40),再準備該定時任務下乙個命令的執行;
b.過了20秒後,第二個定時任務便執行第二個命令,也是輸出資料到hello.log;此時第三個定時任務還有20秒就執行第二個命令(已經sleep了20,還要再sleep20)
c.再過20秒,第三個定時任務便執行第二個命令,也是輸出資料到hello.log;
d.又過20秒,此時一分鐘已經過去了,crond服務又開始檢查系統中的定時任務
以此類推,當我們tail -f hello.log的方法追蹤hello.log中的資料變化時,可以看到每20秒就有乙個hello輸出,即我們上面的方法就實現了每20秒的定時任務了。
3.如何用上面方法實現每秒級的定時任務?
實際可以發現,上面的方法只是用變通的思路來實現秒級的定時任務,即多條crond語句+sleep,那如果想要實現每秒級的定時任務,想一下,按照這種思路去做,那是不是相當於下面這樣:
* * * * * command實現乙個功能就要寫60條crond語句!* * * * * sleep 1;command
* * * * * sleep 2;command
* * * * * sleep 3;command
……* * * * * sleep 59;command
所以沒有人會這樣去幹吧,這樣的效率也真是太低了!所以,雖然是可以實現每秒級的定時任務,但由於效率實在太低,也太麻煩了,如果真有這樣的需要,就得用其他方法替代了,比如寫shell指令碼程式、借助第三方軟體實現等。
4.可以實現每幾十秒的定時任務
因此,用上面介紹的方法,其實要實現幾十秒每次的定時任務,也是比較簡單的,如果沒有太嚴格的要求,也可以考慮考慮的。
利用crond實現秒級執行的辦法
昨天在設定 目錄的安全時候,為了安全方面的考慮需要將某個目錄下的檔案3秒清空一次,第一反應是通過cron來解決,可crontab似乎只支援到分,怎麼辦呢?經過一番努力,終於解決了,分享一下方法,希望幫助到有類似需求的同學。小編在這裡先簡單介紹下cron是個什麼東西。crontab命令常見於unix和...
Linux crontab 實現秒級定時任務
1 crontab 的延時 原理 通過延時方法 sleep n 來實現每n秒執行。crontab e 輸入以下語句,然後 wq 儲存退出。注意 60必須能整除間隔的秒數 沒有餘數 例如間隔的秒數是2,4,6,10,12等。如果間隔的秒數太少,例如2秒執行一次,這樣就需要在crontab 加入60 2...
linux 實現秒級執行定時任務
前言 總所周知,linux的crontab定時任務最高只能執行到分鐘級別,每分鐘進行執行指定指令碼。但是,有很多時候我們進行統計操作的時候,需要執行的頻率比較高,達到秒級。接下來,整理下秒級的定時任務的開啟 1 進入定時任務管理編輯頁面 crontab e 2 新增新的任務 wen.sh為需要執行的...