對於作過 Web 開發的人來講,定時任務這個東西應該不會感到陌生;而說到定時任務,就應該都會想到 Crontab ,即便想不到,百度谷歌一下,返回的大部分結果都是指向 Linux 的 Crontab 的!面試
最近在找工做,除了面試以外,倒也沒什麼重要的事情了。趁着有時間,正好總結一下 Crontab 的知識點,萬一恰好被哪一個面試官問道了呢 ^_^工具
我如今還記得第一次使用 Crontab 是一個什麼場景。當時是本身一我的獨立開發一個遊戲金幣商城,主要服務的對象是海外的客戶,包括美國、泰國等。金幣商城的默認幣種是美圓($),固然能夠切換成泰銖(฿)、歐元(€)等。幣種之間的轉換是以美圓爲單位,根據各幣種與美圓之間的匯率來轉換的。.net
商城開發完成,上線一段時間以後,老闆忽然找到我說,「小陳啊,泰國有個傢伙買了 10000 龍之谷的 金幣,它付款的金額怎麼不對啊?」。我就趕忙檢查是計算錯誤呢仍是什麼其餘緣由了。code
後來發現是幣種之間的匯率天天變化形成的,後來經過 Crontab 定時更新匯率數據來避免這個問題。對象
就這樣,我瞭解到了 Crontab。遊戲
命令語法:crontab
crontab [-u user] [-l | -r | -e]
經常使用參數的含義:開發
參數 | 含義
---|---
-u user | 指定特定的用戶;若是該選項缺省,則默認操做命令執行者的
-l | 顯示當前的定時任務
-r | 刪除當前的定時任務
-e | 編輯當前的定時任務文檔
* * * * * 命令 | | | | | | | | | +---> 星期幾(0 ~ 6),0 = 星期天 | | | +-------> 月份(1 ~ 12) | | +-----------> 幾號(1 ~ 31) | +---------------> 小時(0 ~ 23) +-------------------> 分鐘(0 ~ 59)
如上所示,Crontab 任務由兩部分組成,前面星號部分表明時間,後面表明須要執行的命令。get
*
,表示「從頭至尾」 *
,則表示每分鐘執行一次-
表示,表示某個區間 12-15
,表示在 12
,13
,14
,15
小時1,2,5,9
或者 0-4,8-12
10-18/2
,表示在 10 到 18 小時之間每兩小時 */2
,表示沒兩小時看語法老是枯燥的,來看幾個例子就會明白了。
首先是打開並編輯當前用戶的 Crontab 任務:
crontab -e
在終端上使用上面命令便可。
每分鐘執行一次命令
*/1 * * * * date >> /tmp/test.log
每小時執行一次命令
0 * * * * date >> /tmp/test.log
天天凌晨 3 點執行一次命令
0 3 * * * date >> /tmp/test.log
在天天的第 九、十、十二、17 小時執行一次命令
0 9,10,12,17 * * * date >> /tmp/test.log
在每個月的 1 ~ 10 號的 九、18 小時的每 10 分鐘執行一次命令
*/10 9,18 1-10 * * date >> /tmp/test.log
Crontab 是個經常使用的定時任務工具,可是它的最小時間單位是分鐘,也就是說,若是你想設置精確到秒鐘的定時任務,那麼 Crontab 就無能爲力了。
可是我有在 workerman 的文檔中看到,他已經實現了一個毫秒級別的定時器,若是有需求,能夠研究研究哈。