Crontab 定時任務

對於作過 Web 開發的人來講,定時任務這個東西應該不會感到陌生;而說到定時任務,就應該都會想到 Crontab ,即便想不到,百度谷歌一下,返回的大部分結果都是指向 Linux 的 Crontab 的!面試

最近在找工做,除了面試以外,倒也沒什麼重要的事情了。趁着有時間,正好總結一下 Crontab 的知識點,萬一恰好被哪一個面試官問道了呢 ^_^工具

我如今還記得第一次使用 Crontab 是一個什麼場景。當時是本身一我的獨立開發一個遊戲金幣商城,主要服務的對象是海外的客戶,包括美國、泰國等。金幣商城的默認幣種是美圓($),固然能夠切換成泰銖(฿)、歐元(€)等。幣種之間的轉換是以美圓爲單位,根據各幣種與美圓之間的匯率來轉換的。.net

商城開發完成,上線一段時間以後,老闆忽然找到我說,「小陳啊,泰國有個傢伙買了 10000 龍之谷的 金幣,它付款的金額怎麼不對啊?」。我就趕忙檢查是計算錯誤呢仍是什麼其餘緣由了。code

後來發現是幣種之間的匯率天天變化形成的,後來經過 Crontab 定時更新匯率數據來避免這個問題。對象

就這樣,我瞭解到了 Crontab。遊戲

關於 Crontab 命令

命令語法:crontab

crontab [-u user] [-l | -r | -e]

經常使用參數的含義:開發

參數 | 含義
---|---
-u user | 指定特定的用戶;若是該選項缺省,則默認操做命令執行者的
-l | 顯示當前的定時任務
-r | 刪除當前的定時任務
-e | 編輯當前的定時任務文檔

Crontab 任務的語法
*   *   *   *   *   命令
|   |   |   |   |
|   |   |   |   +---> 星期幾(0 ~ 6),0 = 星期天
|   |   |   +-------> 月份(1 ~ 12)
|   |   +-----------> 幾號(1 ~ 31)
|   +---------------> 小時(0 ~ 23)
+-------------------> 分鐘(0 ~ 59)

如上所示,Crontab 任務由兩部分組成,前面星號部分表明時間,後面表明須要執行的命令。get

  • 星號、字段能夠設置爲星號 * ,表示「從頭至尾」
    例如在分鐘那裏設置 * ,則表示每分鐘執行一次
  • 範圍、範圍由兩個數字加中間一個連字符 - 表示,表示某個區間
    例如在小時那裏設置 12-15,表示在 12131415 小時
  • 列表、一個由逗號隔開的數字或範圍的列表是容許的
    例如 1,2,5,9 或者 0-4,8-12
  • 步數值、步數值能夠和範圍一塊兒使用
    例如在小時那裏設置 10-18/2 ,表示在 10 到 18 小時之間每兩小時
    固然,這樣子也是能夠的 */2,表示沒兩小時
一些例子

看語法老是枯燥的,來看幾個例子就會明白了。

首先是打開並編輯當前用戶的 Crontab 任務:

crontab -e

在終端上使用上面命令便可。

  1. 每分鐘執行一次命令

    */1 * * * * date >> /tmp/test.log
  2. 每小時執行一次命令

    0 * * * * date >> /tmp/test.log
  3. 天天凌晨 3 點執行一次命令

    0 3 * * * date >> /tmp/test.log
  4. 在天天的第 九、十、十二、17 小時執行一次命令

    0 9,10,12,17 * * * date >> /tmp/test.log
  5. 在每個月的 1 ~ 10 號的 九、18 小時的每 10 分鐘執行一次命令

    */10 9,18 1-10 * * date >> /tmp/test.log
最後

Crontab 是個經常使用的定時任務工具,可是它的最小時間單位是分鐘,也就是說,若是你想設置精確到秒鐘的定時任務,那麼 Crontab 就無能爲力了。

可是我有在 workerman 的文檔中看到,他已經實現了一個毫秒級別的定時器,若是有需求,能夠研究研究哈。

相關文章
相關標籤/搜索